Приложение сокета Java NIO: повторно использовать SocketChannel или выбросить потерянное соединение? - PullRequest
0 голосов
/ 02 февраля 2012

Я работаю над приложением промежуточного программного обеспечения, которое создает и поддерживает соединения TCP / IP с несколькими серверами.Если приложение обнаружит, что соединение было потеряно, оно попытается восстановить соединение по таймеру, пока соединение не будет восстановлено.

Приложение использует объекты java.nio.SocketChannel в неблокирующем режиме с Selector / SelectionKey для обработки событий сокета.

После потери соединения лучше выброситьтекущий объект SocketChannel и создать новый для повторного подключения (также получить новый SelectionKey) или для повторного использования тех же SocketChannel и SelectionKey (который, я думаю, недопустим, пока соединение не будет установлено снова)?

1 Ответ

2 голосов
/ 03 февраля 2012

Вы должны выбросить это. Если соединение потеряно, вы должны закрыть SocketChannel на своем конце, чтобы правильно очистить соединение. Если вы хотите попытаться восстановить соединение, просто сделайте то же, что и в первый раз (createSocket, неблокирующее подключение, инициализация и т. Д.).

...