perl – autoflush在socket中做什么?我们为什么用它?

前端之家收集整理的这篇文章主要介绍了perl – autoflush在socket中做什么?我们为什么用它?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在研究一些套接代码,无法弄清楚为什么在socket上使用autoflush.就是这样的

my $sock = IO::Socket::Unix(Peer => $socketfilename,Type => SOCK_STREAM)

autoflush $sock 1;

还有一些地方

autoflush STDERR 1

autoflush STDOUT 1

对于一般filehnadles.

它有什么作用?如果我不使用它会发生或将会发生什么?请举一些实际的例子,以便我理解而不是简单的定义.

解决方法

数据通常不会立即在套接字上发送,它会被缓冲到某个点,然后一次性发送.

自动刷新意味着数据直接通过缓冲区然后刷新,而不是保留在缓冲区中等待其他数据到达和累积.

就如此容易.

没有自动刷新:

Tick | DATA sent|Socket Buffer| DATA received
.....|..........|.............|..............
1    | XX       | XX          | (nothing)
2    | yy       | yyXX        | (nothing)
3    | ZZZ      | ZZZyyXX     | (nothing)
4    | t        | (empty)     | tZZZyyXX

使用自动刷新:

Tick | DATA sent | Socket Buffer | DATA received
.....|...........|...............|..............
1    | XX        | ()            | XX
2    | yy        | ()            | yy
3    | ZZZ       | ()            | ZZZ
4    | t         | ()            | t

>套接字缓冲区大小:8个字符>非常简单的例子,你可能会在看到它之后提出一些其他问题 – 其中很大一部分也是依赖于实现的.此外,缓冲可以发生在各个级别(发送者,接收者,应用程序等).

猜你在找的Perl相关文章