Держать TCPSocket открытым: ответственность сервера или клиента?

Я читал в Интернете примеры о 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: Я довольно любопытен в сети, так что, пожалуйста, дайте мне знать, если мой вопрос звучит совершенно глупо.

1 ответ

Решение

Сервер обычно отвечает за поддержание открытых соединений, потому что клиент (являющийся тем, кто подключается к серверу) может разорвать соединение в любое время.

Серверы обычно отвечают за все, о чем клиент не заботится. Видеоигры не заботятся о соединении с сервером, пока оно там. Он просто хочет свои данные, чтобы он мог продолжать работать.

Другие вопросы по тегам