如何使用Ruby维护TCP连接?
使用TCPSocket
,我需要socket.puts "foobar"
,然后socket.close
让套接字在另一边socket.read
消息。
有没有办法通过套接字发送或接收消息,但没有关闭套接字,这意味着我可以再次发送消息而不再创建套接字?
ps像websocket一样的东西
如果你遍历超类链,你最终会看到你从IO
inheritance。 在Ruby中,大多数IO
对象缓冲数据,以便更有效地从磁盘写入和读取。
在你的情况下,缓冲区不够大(或没有足够的时间没有通过),因为它要冲洗掉。 但是,当您关闭套接字时,这会强制刷新缓冲区资源。
你有几个选择:
- 您可以使用
IO#flush
手动强制缓冲区IO#flush
。 - 通过将
IO#sync=
设置为true
,可以将缓冲区设置为在写入/读取后始终同步。 您可以使用IO#sync
检查IO
对象的同步状态; 我猜你会看到socket.sync #=> false
- 使用
BasicSocket#send
将调用 POSIXsend(2)
; 由于套接字是使用O_FSYNC
设置初始化的 ,因此send将是同步和primefaces的。
关闭连接以便另一方阅读它是不必要的。 send
应立即通过连接传输数据。 确保对方正在从套接字读取。