如何使用Ruby维护TCP连接?
使用如何使用Ruby维护TCP连接?,ruby,tcpsocket,Ruby,Tcpsocket,使用TCPSocket,我需要socket.put“foobar”,然后socket.close让socket在另一侧socket.read消息 有没有一种方法可以通过套接字发送或接收消息,但不关闭套接字,这意味着我可以在不再次创建套接字的情况下再次发送消息 p、 s类似于websocket不必关闭连接,另一方就可以读取它发送应立即通过连接传输数据。确保另一方正在从套接字读取数据。另一方读取数据不需要关闭连接发送应立即通过连接传输数据。确保另一方正在从套接字读取数据。如果向上遍历超类链,最终将看
TCPSocket
,我需要socket.put“foobar”
,然后socket.close
让socket在另一侧socket.read
消息
有没有一种方法可以通过套接字发送或接收消息,但不关闭套接字,这意味着我可以在不再次创建套接字的情况下再次发送消息
p、 s类似于websocket不必关闭连接,另一方就可以读取它<代码>发送应立即通过连接传输数据。确保另一方正在从套接字读取数据。另一方读取数据不需要关闭连接<代码>发送应立即通过连接传输数据。确保另一方正在从套接字读取数据。如果向上遍历超类链,最终将看到继承自。在Ruby中,大多数
IO
对象都会缓冲数据,以便更有效地从磁盘写入和读取数据
在您的情况下,缓冲区没有足够大(或者没有足够的时间)来刷新。但是,当您关闭套接字时,这会强制刷新缓冲区资源
您有几个选择:
- 您可以使用手动强制缓冲区刷新
- 通过设置为
,可以将缓冲区设置为在写入/读取后始终同步。您可以使用检查true
对象的同步状态;我猜你会看到IO
socket.sync#=>false
- 使用将POSIX;由于套接字已设置,因此发送将是同步的和原子的
IO
对象都会缓冲数据,以便更有效地从磁盘写入和读取数据
在您的情况下,缓冲区没有足够大(或者没有足够的时间)来刷新。但是,当您关闭套接字时,这会强制刷新缓冲区资源
您有几个选择:
- 您可以使用手动强制缓冲区刷新
- 通过设置为
,可以将缓冲区设置为在写入/读取后始终同步。您可以使用检查true
对象的同步状态;我猜你会看到IO
socket.sync#=>false
- 使用将POSIX;由于套接字已设置,因此发送将是同步的和原子的
sync
。从源代码上看,sockets带有set,只调用POSIX Hmmm,忽略了OP使用的是put
,而不是send
,它确实通过sync
控制的内部缓冲逻辑,这是一个很好的答案!我已经尝试了所有三种解决方案,都很有效,感谢您指出基本的POSIX操作不必在套接字上设置sync
。从源代码上看,sockets带有set,只调用POSIX Hmmm,忽略了OP使用的是put
,而不是send
,它确实通过sync
控制的内部缓冲逻辑,这是一个很好的答案!我已经尝试了所有这三种解决方案,都很有效,感谢您指出了底层POSIX操作