2012-03-30 1 views
1

Мой TCP-сервер реализован с использованием Netty. Мой клиент использует vanilla java.net.Socket для подключения к этому серверу. Я использую тот же сокет для отправки нескольких запросов на сервер. После выполнения всех запросов клиент вызывает socket.close().Netty - Закрытие сокета на конце клиента закрывает канал на сервере

Я не закрываю канал в любом месте своего кода сервера. Кроме того, я установил TCP KEEP_ALIVE на свой сервер. Закрытие сокета на стороне клиента автоматически закроет канал на сервере или я должен сделать что-то еще явно и что лучше всего?

+0

Возможно, вы захотите прочитать этот ответ: http://stackoverflow.com/questions/2165670/socket-close-in-java. – jgauffin

ответ

2

Обычно, если приложение закрывает сокет, его удаленный одноранговый узел также замечает, что закрытие. Поэтому вам не нужно вызывать close() с обеих сторон. Однако иногда из-за сетевых проблем вы не можете получать уведомления, когда удаленный одноранговый узел закрывает соединение. Чтобы обойти эту проблему, рекомендуется послать некоторое сообщение периодически, а затем вы обнаружите неожиданное закрытие раньше.

Обратите внимание, что SO_KEEP_ALIVE здесь не поможет, потому что для большинства операционных систем, поскольку время по умолчанию остается в живых, очень велико.