Шаблон Java Socket Client
Мое java-приложение должно отправлять сообщения (многопоточные) на сервер сокетов. Приложение может отправлять около 100-200 сообщений в секунду.
Я хочу знать, что является лучшим подходом для этого?
- Откройте один клиентский сокет и отправьте сообщение из всех потоков через этот один сокет. Недостатки: приходится обрабатывать логику переподключения при сбое соединения, может потерять много сообщений во время переподключения. Безопасность, блокировка??
- Создайте новое соединение с сокетом клиента для каждого потока и закройте его после отправки. Недостатки: несмотря на то, что я закрываю сокет, порты будут ждать до периода TIME_WAIT.
Какой практический подход лучше?
2 ответа
Я хотел бы предложить 3.: Открыть сокет на поток и повторно использовать потоки (например, через пул потоков). Затем обработайте переподключение внутри потока или просто правильно расположите его и создайте новое. Таким образом, вы можете избежать проблем с блокировкой и синхронизацией.
100-200 сообщений в секунду не так много. Я не буду повторно подключаться каждый раз, так как это дорого. Если вы снова используете свое соединение, оно будет намного быстрее.
Если вы беспокоитесь о потере сообщений, вы можете отправлять партию сообщений или по одному за один раз и ждать подтверждения от сервера, на который они были получены. Таким образом, вы можете отправлять тысячи сообщений в секунду.