Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
 Long polling на JAX-WS  [new]
rabiter
Member

Откуда: SPb
Сообщений: 632
Доброго времени дня!

Понадобилось нам реализовать long polling вебсервис операцию. Смысл такой, что клиент отправляет SOAP запрос и не сразу получает ответ, а висит, допустим минуту, и по истечении минуты или раньше WebService отправляет обратно ответ. Ну вообщем обычный LongPolling, только для JAX-WS.

Так воооот. Так как эту минуту webservice может по сути ничего особенного не делать, а всего лишь ждать какого-нибудь события, то не хотелось бы, чтобы он Thread держал. В Servlet 3 появилась такая фишка как Async Servlet

Чудесно рабоатет! Но, для сервлетов.... Кто-нибудь сталкивался с тем, как это включить для веб сервиса? Ведь по сути тот же сервлет! Но при попытке вызвать HttpRequest#startAsync внутри webservice операции закономерно получаем
UT010026: Async is not supported for this request, as not all filters or Servlets were marked as supporting async


Ну потому что сервлет не помечен как async=true.

Или может вообще иначе как-нибудь сделать? Или пусть клиент callback передает в запросе и получает SOAP нотификацию отдельным обратным запросом...
17 сен 19, 15:04    [21972608]     Ответить | Цитировать Сообщить модератору
 Re: Long polling на JAX-WS  [new]
qi_ip
Member

Откуда:
Сообщений: 591
Websocket?
17 сен 19, 16:15    [21972672]     Ответить | Цитировать Сообщить модератору
 Re: Long polling на JAX-WS  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2475
rabiter,
А зачем вам это понадобилось?
SOAP вбивает время ответа внутри сообщений чтобы его не взломали. Там миллисекунды.
И есть 3 или 4 вида таймаутов штатных.
Это же не чат одноклассницы асинхронность делать.
17 сен 19, 16:17    [21972676]     Ответить | Цитировать Сообщить модератору
 Re: Long polling на JAX-WS  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2475
rabiter
Понадобилось нам
проснулись с утра и понадобилось?
17 сен 19, 16:18    [21972677]     Ответить | Цитировать Сообщить модератору
 Re: Long polling на JAX-WS  [new]
rabiter
Member

Откуда: SPb
Сообщений: 632
qi_ip
Websocket?


Вариант, но нельзя исключать, что вебсокет будет недоступен (продукт коробочный, фиг знает какой у заказчика environment, поэтому мы исходим из websocket но всегда готовы downgrade сделать на longpolling)
17 сен 19, 16:59    [21972720]     Ответить | Цитировать Сообщить модератору
 Re: Long polling на JAX-WS  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2475
rabiter,
Вебсокет или tcp/lp или http это протокол поддерживает soap из коробки. Он нижнего уровня.
17 сен 19, 17:04    [21972727]     Ответить | Цитировать Сообщить модератору
 Re: Long polling на JAX-WS  [new]
rabiter
Member

Откуда: SPb
Сообщений: 632
PetroNotC Sharp
SOAP вбивает время ответа внутри сообщений чтобы его не взломали. Там миллисекунды.

Как timeout спасет от взлома, и какого взлома? Не видел никаких таймаутов штатных внутри SOAP, я в дебаге между SOAP клиентом и SOAP сервером могу какие угодно задержки делать.

PetroNotC Sharp
Это же не чат одноклассницы асинхронность делать.
а что вас смущает? Вообще асинхронные вебсервисы обычная практика. Клиент отправляет запрос (+ в запросе отправляет callback адрес), сервер сразу возвращает дежурный ответ, типа ожидайте, мы с вами свяжемся. И потом, по когда ответ готов, отправляет по указанному клиенитом callback адресу ответ.
Но тут по сути получается два запроса - от клиента к серверу и потом от сервера к клиенту (вроде так).

Мне нужен long polling, вот зачем:
Это soap метод запроса конфигурации. И он должен висеть до тех пор, пока конфигурация не изменится. Т.е. так другая система будет трекать момент изменения конфигурации в нашей системе. Хрень какая-то, может лучше нам их оповещать самим, когда конфигурация изменяется. Пойду сейчас с ними пообщаюсь.

По поводу JAX-WS и AsyncServlet - погуглил, похоже нельзя их подружить.
17 сен 19, 17:15    [21972729]     Ответить | Цитировать Сообщить модератору
 Re: Long polling на JAX-WS  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2475
rabiter
Вообще асинхронные вебсервисы обычная практика. Клиент отправляет запрос (+ в запросе отправляет callback адрес),
в шарпе это из коробки.
Ты уверен что при Двухсторонней связи это нет в java?
Каллбэка?
17 сен 19, 17:19    [21972733]     Ответить | Цитировать Сообщить модератору
 Re: Long polling на JAX-WS  [new]
rabiter
Member

Откуда: SPb
Сообщений: 632
PetroNotC Sharp
rabiter
Вообще асинхронные вебсервисы обычная практика. Клиент отправляет запрос (+ в запросе отправляет callback адрес),
в шарпе это из коробки.
Ты уверен что при Двухсторонней связи это нет в java?
Каллбэка?


да есть конечно, что значит нет, думаю надо тут копать, нафиг этот long polling, попробуем по другому.
17 сен 19, 17:30    [21972743]     Ответить | Цитировать Сообщить модератору
 Re: Long polling на JAX-WS  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2475
rabiter
попробуем по другому.
да.
Покопайте.
А насчет таймаута, то должен
connect.timeout
request.timeout
Иначе если они большие, то любой большой запрос вредного клиента и у вас сервер встает колом.
А если таймАут на ответ 1 сек. То сервер сбросит запрос и не ляжет под хакером.
17 сен 19, 17:33    [21972746]     Ответить | Цитировать Сообщить модератору
 Re: Long polling на JAX-WS  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2475
Обратный вызов вместо лонгпоолинг
https://examples.javacodegeeks.com/enterprise-java/jws/jax-ws-callback-example/
17 сен 19, 17:39    [21972753]     Ответить | Цитировать Сообщить модератору
 Re: Long polling на JAX-WS  [new]
rabiter
Member

Откуда: SPb
Сообщений: 632
PetroNotC Sharp
Обратный вызов вместо лонгпоолинг
https://examples.javacodegeeks.com/enterprise-java/jws/jax-ws-callback-example/


спасибо за ссылку! сохранил
17 сен 19, 17:43    [21972761]     Ответить | Цитировать Сообщить модератору
Все форумы / Java Ответить