如何使用Ruby维护TCP连接?

使用TCPSocket ,我需要socket.puts "foobar" ,然后socket.close让套接字在另一边socket.read消息。

有没有办法通过套接字发送或接收消息,但没有关闭套接字,这意味着我可以再次发送消息而不再创建套接字?

ps像websocket一样的东西

如果你遍历超类链,你最终会看到你从IOinheritance。 在Ruby中,大多数IO对象缓冲数据,以便更有效地从磁盘写入和读取。

在你的情况下,缓冲区不够大(或没有足够的时间没有通过),因为它要冲洗掉。 但是,当您关闭套接字时,这会强制刷新缓冲区资源。

你有几个选择:

  • 您可以使用IO#flush手动强制缓冲区IO#flush
  • 通过将IO#sync=设置为true ,可以将缓冲区设置为在写入/读取后始终同步。 您可以使用IO#sync检查IO对象的同步状态; 我猜你会看到socket.sync #=> false
  • 使用BasicSocket#send将调用 POSIX send(2) ; 由于套接字是使用O_FSYNC设置初始化的 ,因此send将是同步和primefaces的。

关闭连接以便另一方阅读它是不必要的。 send应立即通过连接传输数据。 确保对方正在从套接字读取。