【问题标题】:How to send and receive data multiple times using TCPSocket in Ruby如何在Ruby中使用TCPSocket多次发送和接收数据
【发布时间】:2015-08-23 16:37:37
【问题描述】:

如何使用 TCPSocket 多次发送和接收数据?

require 'socket'

TCPSocket.open("example.com", 80) {|s|
  s.send "GET / HTTP/1.0\r\n\r\n", 0
  puts s.read

  s.send "GET / HTTP/1.0\r\n\r\n", 0
  # Here is no data. PS: Without reconnect.
  puts s.read
}

我搜索了但没有找到答案。

【问题讨论】:

    标签: ruby sockets tcpsocket


    【解决方案1】:

    简短的回答是,您不能使用 TCPSocket 轻松做到这一点(它可能可以做到,但不值得您费心)。
    在 HTTP 的情况下,服务器将在发送响应后关闭连接。

    您想要做的是使用可以执行 HTTP 的操作,并且还了解如何在连接上执行 keep-alive(即持久),以便您可以重用连接。对于一些背景:https://en.wikipedia.org/wiki/HTTP_persistent_connection

    看看: http://www.slideshare.net/HiroshiNakamura/rubyhttp-clients-comparison 幻灯片 30. 可能已经过时,但会给你一个很好的起点。

    【讨论】:

    • 我很抱歉我的错误示​​例代码。假设web服务器没有关闭连接,怎么办?谢谢!
    • 您需要了解 keep-alive 的工作原理才能利用它。基本上,客户端必须通过标头请求它并尝试重用连接。建议您使用已经知道如何执行此操作的库,而不是在这里重新发明*
    最近更新 更多