Шаблон Java Socket Client

Мое java-приложение должно отправлять сообщения (многопоточные) на сервер сокетов. Приложение может отправлять около 100-200 сообщений в секунду.

Я хочу знать, что является лучшим подходом для этого?

  1. Откройте один клиентский сокет и отправьте сообщение из всех потоков через этот один сокет. Недостатки: приходится обрабатывать логику переподключения при сбое соединения, может потерять много сообщений во время переподключения. Безопасность, блокировка??
  2. Создайте новое соединение с сокетом клиента для каждого потока и закройте его после отправки. Недостатки: несмотря на то, что я закрываю сокет, порты будут ждать до периода TIME_WAIT.

Какой практический подход лучше?

2 ответа

Решение

Я хотел бы предложить 3.: Открыть сокет на поток и повторно использовать потоки (например, через пул потоков). Затем обработайте переподключение внутри потока или просто правильно расположите его и создайте новое. Таким образом, вы можете избежать проблем с блокировкой и синхронизацией.

100-200 сообщений в секунду не так много. Я не буду повторно подключаться каждый раз, так как это дорого. Если вы снова используете свое соединение, оно будет намного быстрее.

Если вы беспокоитесь о потере сообщений, вы можете отправлять партию сообщений или по одному за один раз и ждать подтверждения от сервера, на который они были получены. Таким образом, вы можете отправлять тысячи сообщений в секунду.

Другие вопросы по тегам