Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Ruby维护TCP连接?_Ruby_Tcpsocket - Fatal编程技术网

如何使用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;由于套接字已设置,因此发送将是同步的和原子的

如果你向上遍历超类链,你最终会看到你从中继承。在Ruby中,大多数
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操作