【发布时间】:2011-05-27 22:16:37
【问题描述】:
我有一个服务器连续向客户端发送两条消息:
require 'socket'
require 'thread'
connections = []
server = TCPServer.new(9998)
loop do
Thread.start(server.accept) do |client|
client.print 'Once'
client.print 'Upon a time.'
end #eo Thread
end #eo infinte loop
客户是:
require 'socket'
client = TCPSocket.new('localhost', 9998)
2.times { print client.read }
client.close
客户端“暂停”直到我关闭服务器,然后才打印出消息。我知道将client.close 添加到服务器会修复暂停,但我不想关闭套接字。
我知道有些应用程序会重用 TCPSocket。所以,它可以是Client > Server、Server > Client、Client > Server x2,等等。我确信在 Ruby 中有一种方法可以做到这一点。我就是想不通。
所以,我的问题清单是:
- 如何创建持久服务器 如上所述的客户端连接?
- 有没有更好的方法在不使用
loop的情况下保持服务器打开? - 为什么在服务器中没有
client.close时它会一直保持挂起状态?服务器在发送消息之前是否对消息进行缓冲?
【问题讨论】: