Параллельная отправка сокета Java - PullRequest
0 голосов
/ 10 февраля 2011

Мне нужно отслеживать состояние устройства из моего Java-приложения (пример устройства ip = 192.168.0.22 и порт 17000, монитор означает, что я отправляю запрос каждые 1 сек и получаю данные как ответ). Мне нужно параллельно с этим отправлять на это устройство другие сообщения и получать ответы (по тому же ip и тому же порту). Я создаю сокет = новый сокет (ipAddress, порт). Как добиться того, чтобы я не получил коллизию (мне нужно: я отправляю первым, я получаю ответ от первого, я посылаю второе, я получаю ответ от второго, я отправляю третий, я получаю ответ от третьего и т. Д.)?

Ответы [ 3 ]

1 голос
/ 10 февраля 2011

Если ваша работа связана с заказом, поэтому вы должны отправлять данные запроса по одному, насколько я понимаю, вы имеете в виду коллизию, когда отправляете данные на устройство одновременно, ответ устройстватебе?не беспокойтесь, потому что сокет должен быть в буфере, один для отправки, а другой для получения.

1 голос
/ 10 февраля 2011

Вы можете определить идентификатор типа запроса.Затем на стороне реализации SocketServer вы можете проанализировать идентификатор и передать запрос новому потоку, используемому для обработки этого типа запроса.Таким образом, в вашем случае вы бы определили 3 разных обработчика, и для каждого типа вы получаете запрос, который вы выбираете, какой обработчик использовать для обработки запроса.Каждый запрос будет выполняться с использованием одного и того же сокета.

Однако из вашего последнего предложения:

Мне нужно: отправляю первым, получаю ответ первым, отправляю вторым получаюответ от второго, я отправляю третий, я получаю ответ от третьего и так далее

Это не похоже на параллельные запросы.Скорее звучит так, будто вы хотите запускать их один за другим, то есть второй запрос зависит от ответа первого запроса.Если это так, то вы просто используете один и тот же сокет (не создавайте новый для каждого запроса).Тогда логикой в ​​коде запроса будет просто отправить запрос 1, дождаться ответа 1, затем отправить запрос 2 и т. Д. И т. Д.

1 голос
/ 10 февраля 2011

Если я что-то упустил,

  • вы можете сделать каждый в отдельном потоке,
  • или вы можете отправить запрос на все три сокета и дождаться всех трех ответов.
  • или вы можете настроить свой сервер таким образом, чтобы иметь три ожидающих запроса одновременно. (Уже может работать правильно) Отправьте три запроса одному соединению и дождитесь трех ответов.

Последнее может быть наиболее эффективным решением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...