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