Ruby 写入标准输出后何时使用flush?

Ruby 写入标准输出后何时使用flush?,ruby,Ruby,我知道flush的功能。它获取存储在缓冲区中的数据并将其写入标准输出以清空缓冲区。但我不清楚何时需要这样做(刷新不应该由解释器自动完成)。我正在阅读《Ruby编程语言》一书,书中给出了一个套接字服务器的示例: require 'socket' host, port = ARGV begin STDOUT.print "Connnecting..." STDOUT.flush s = TCPSocket.open(host,port) STDOUT.p

我知道flush的功能。它获取存储在缓冲区中的数据并将其写入标准输出以清空缓冲区。但我不清楚何时需要这样做(刷新不应该由解释器自动完成)。我正在阅读《Ruby编程语言》一书,书中给出了一个套接字服务器的示例:

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?这似乎是武断的。这就是我的困惑所在。

以确保“连接…”在潜在的长期运行事件发生之前打印出来

一旦连接,立即获得反馈就不那么重要了,在打印“>”字符以响应读取数据后,您将刷新