0

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: 私はネットワーキングに関してかなり初心者なので、私の質問が完全にばかげているように聞こえる場合は、親切にお知らせください。

4

1 に答える 1

1

クライアント (サーバーに接続しているクライアント) はいつでも接続を切断できるため、サーバーは通常、接続を開いたままにしておく責任があります。

サーバーは通常、クライアントが気にしないすべてのことを担当します。ビデオ ゲームは、サーバーが存在する限り、サーバーへの接続を気にしません。実行を継続できるように、データが必要なだけです。

于 2014-03-11T03:54:43.123 に答える