Держать 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 ответ
Сервер обычно отвечает за поддержание открытых соединений, потому что клиент (являющийся тем, кто подключается к серверу) может разорвать соединение в любое время.
Серверы обычно отвечают за все, о чем клиент не заботится. Видеоигры не заботятся о соединении с сервером, пока оно там. Он просто хочет свои данные, чтобы он мог продолжать работать.