Ruby 写入标准输出后何时使用flush?
我知道flush的功能。它获取存储在缓冲区中的数据并将其写入标准输出以清空缓冲区。但我不清楚何时需要这样做(刷新不应该由解释器自动完成)。我正在阅读《Ruby编程语言》一书,书中给出了一个套接字服务器的示例:Ruby 写入标准输出后何时使用flush?,ruby,Ruby,我知道flush的功能。它获取存储在缓冲区中的数据并将其写入标准输出以清空缓冲区。但我不清楚何时需要这样做(刷新不应该由解释器自动完成)。我正在阅读《Ruby编程语言》一书,书中给出了一个套接字服务器的示例: require 'socket' host, port = ARGV begin STDOUT.print "Connnecting..." STDOUT.flush s = TCPSocket.open(host,port) STDOUT.p
require 'socket'
host, port = ARGV
begin
STDOUT.print "Connnecting..."
STDOUT.flush
s = TCPSocket.open(host,port)
STDOUT.puts "done"
local, peer = s.addr, s.peeraddr
STDOUT.print "Connected to #{peer[2]}:#{peer[1]}"
STDOUT.print "Using local port #{local[1]}"
begin
sleep(0.5)
msg = s.read_nonblock(4096)
STDOUT.puts msg.chop
rescue SystemCallError
end
loop do
STDOUT.print '> '
STDOUT.flush
local = STDIN.gets
break if !local
s.puts(local)
s.flush
response = s.readpartial(4096)
puts(response.chop)
end
rescue
puts $!
ensure
s.close if s
end
为什么我们在向标准输出写入“连接”后调用flush,而在向标准输出写入“完成”后不调用flush?这似乎是武断的。这就是我的困惑所在。以确保“连接…”在潜在的长期运行事件发生之前打印出来
一旦连接,立即获得反馈就不那么重要了,在打印“>”字符以响应读取数据后,您将刷新