【问题标题】:Keeping TCPSocket open: server or client's responsibility?保持 TCPSocket 开放:服务器或客户端的责任?
【发布时间】:2014-03-11 02:02:36
【问题描述】:

我一直在网上阅读有关 Ruby 的 TCPSocket 和 TCPServer 的示例,但我仍然不知道也找不到 什么是最佳实践。如果您有一个正在运行的 TCPServer,并且您希望跨多个连接/客户端保持套接字打开,那么谁应该负责保持它们打开,服务器或客户端?

假设你有一个 TCPServer 正在运行:

server = TCPServer.new(8000)
loop do
  client = server.accept
  while line = client.gets
    # process data from client
  end
  client.puts "Response from server"
  client.close  # should server close the socket?
end

和客户:

socket = TCPSocket.new 'localhost', 8000
while line = socket.gets
  # process data from server
end
socket.close # should client close the socket here?

我看到的所有示例的末尾都有socket.close,我认为这不是我想要的,因为这会关闭连接。服务器和客户端应保持开放连接,因为它们需要来回发送数据。

PS:我对网络非常陌生,所以如果我的问题听起来完全愚蠢,请告诉我。

【问题讨论】:

    标签: ruby sockets network-programming tcpsocket


    【解决方案1】:

    服务器通常负责保持连接打开,因为客户端(连接到服务器的客户端)可以随时断开连接。

    服务器通常负责客户端不关心的所有事情。视频游戏并不真正关心与服务器的连接,只要它在那里。它只想要它的数据,以便它可以继续运行。

    【讨论】:

    • 如果客户端关闭连接并重新连接(从/到客户端和服务器上的同一端口)会发生什么情况,这将是同一个连接吗?
    • @DumpHole 如果客户端断开(故意)没有。如果他们的互联网掉线,那么来回发送的数据包就会被丢弃。如果你的客户端突然重新上线,服务器认为客户端没有超时,应该是同一个连接。
    猜你喜欢
    • 2019-01-30
    • 2018-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多