Netty - закрывает ли сокет на стороне клиента канал на сервере - PullRequest
1 голос
/ 30 марта 2012

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

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

1 Ответ

2 голосов
/ 02 апреля 2012

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

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

...