|
|
|
Один порт, очередь, сервлет
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Есть сервлет, он получает запрос от клиентов. Формирует свой запрос и обращается к внешнему сервису (через DatagramSocket). Получает ответ от сервиса (через DatagramSocket), проверяет его. Если первый бит == 1, то следующим должен придти пакет данных на определенный порт, 33333 например: Создается DatagramSocket, ожидающий входящий пакет на 33333: Код: java 1. делает receive(); отвечает клиенту оба сокета закрываются Проблема в следующем. Если клиентов больше одного, то порт 33333 бывает занят, вываливает SocketException c Address Already In Use. Я пытался блокировать соединение с портом 33333 таймаутом(datagramSocket.setSoTimeout(60000)), но это не выход и работает не всегда. Как выйти из ситуации, когда каждый клиент хочет получить данные, а сервлет для этого должден получить пакет на определенном порту? Первое что приходит в голову - организовать очередь. Но как это сделать на сервлете? Создать какое-нибудь глобальное хранилище.. кажется это велосипед. Подскажите пожалуйста правильный путь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2013, 07:59:51 |
|
||
|
Один порт, очередь, сервлет
|
|||
|---|---|---|---|
|
#18+
mr.Jack, Очередь это складировать данные в субд ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2013, 08:38:21 |
|
||
|
Один порт, очередь, сервлет
|
|||
|---|---|---|---|
|
#18+
Ну если есть конкуренция за ресурс надо использовать синхронизацию либо метод sinhronized либо static semaphore В этом случае потоки будут сами в JVM очереди стоять ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2013, 10:36:28 |
|
||
|
Один порт, очередь, сервлет
|
|||
|---|---|---|---|
|
#18+
Вы можете всегда слушать порт 33333 из одного потока, собирать оттуда пакеты в список, потом в том месте где "Создается DatagramSocket, ожидающий входящий пакет на 33333" выбирать нужный пакет из списка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2013, 10:50:34 |
|
||
|
Один порт, очередь, сервлет
|
|||
|---|---|---|---|
|
#18+
Лагман, но в случае сервлета, его инстанс создается для каждого нового клинета, т.е. единой "точки ожидания" на порту 33333 не получится же, или я вас не понял? Petro123, да, теперь я думаю об этом. Использовал синхронизацию, тепеь думаю над архитектурой. Какие технологии тут лучше использовать? Столит ли делать веб сервис, или нет принципиальной выгоды, вообще, любая информация мне поможет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2013, 22:31:19 |
|
||
|
Один порт, очередь, сервлет
|
|||
|---|---|---|---|
|
#18+
mr.Jack, listener вызывается при старте и останове контейнера Код: java 1. 2. 3. 4. 5. mr.JackКакие технологии У вас власть над всеми звеньями цепи? Посмотрите spring integration или jetty там.. или MQ какой-нибудь, что больше нравится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2013, 22:44:11 |
|
||
|
Один порт, очередь, сервлет
|
|||
|---|---|---|---|
|
#18+
mr.Jack, ну, сервлет нужно по любому отвязывать от любых синхронных-тормозов. А БД в связке с ним, хорошо отработанные вещи. Если у вас не математическая задача полёта на Марс, то вполне. Веб сервис счас не модно imho. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2013, 11:17:40 |
|
||
|
Один порт, очередь, сервлет
|
|||
|---|---|---|---|
|
#18+
Лагман, понял Вас, спасибо, уже читаю, это то что нужно Petro123, а почему Вы считаете, что веб сервис сейчас не модно, можете пояснить? Я пока слабо понимаю разницу между веб сервисом и сервлетом, ну кроме того, что в веб сервисах можно использовать веб методы, но их же можно различить и в сервлете. Про WSDL файл еще читал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2013, 10:30:52 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38180755&tid=2129773]: |
0ms |
get settings: |
9ms |
get forum list: |
24ms |
check forum access: |
4ms |
check topic access: |
5ms |
track hit: |
53ms |
get topic data: |
21ms |
get forum data: |
5ms |
get page messages: |
88ms |
get tp. blocked users: |
3ms |
| others: | 314ms |
| total: | 526ms |

| 0 / 0 |
