Атмосфера с поддержкой асинхронного режима должна быть установлена ​​на истинную ошибку с Primefaces

В моем приложении, основанном на первичных лицах, я использую структуру атмосферы для передачи данных с сервера на клиент. Я развертываю приложение на tomcat 7.0.54. Все выглядит нормально, если я получаю доступ к приложению через ip и порт. Неважно, используя локальный хост или IP-адрес удаленного сервера, он работает отлично. Но когда я пытаюсь получить доступ к приложению через http://domainNameWithoutPort.com/appName за Apache2, Atmosphere выдает эти исключения. на стороне клиента (в Chrome):

WebSocket connection to 'ws://domain.com/appName/primepush/liveStream?X-Atmosphere-tracking-id=0&X-Atmosphere-Framework=1.0.8&X-Atmosphere-Transport=websocket&X-Cache-Date=0' failed: Error during WebSocket handshake: Unexpected response code: 501 domain.com/appName/javax.faces.resource/push/push.js.xhtml?ln=primefaces:1
Websocket closed, reason: Connection was closed abnormally (that is, with no close frame being sent).
Websocket closed, wasClean: false
Websocket failed. Downgrading to Comet and resending
Failed to load resource: the server responded with a status of 501 (Not Implemented) http://domain.com/appName/primepush/liveStream?X-Atmosphere-tracking-id=0…k=1.0.8&X-Atmosphere-Transport=long-polling&X-Cache-Date=0&_=140722464408

И те исключения на стороне сервера:

org.atmosphere.cpr.AsynchronousProcessor - Invalid request state. Websocket protocol not supported
org.atmosphere.cpr.AsynchronousProcessor - Invalid request state. AsyncContext#startAsync not supported. Make sure async-supported is set to true in web.xml

и в конечном итоге не обновляет клиентскую часть. Я определил <async-supported>true</async-supported> в web.xml, но не повезло.

Версии используемых технологий; Версия Primefaces: 3.5, версия Atmosphere: 2.1.5, Tomcat 7.0.54

Надеюсь, кто-нибудь знает трюк,

Спасибо всем.


person tugcem    schedule 05.08.2014    source источник


Ответы (1)


Ни Comet, ни WebSocket не поддерживаются при использовании AJP (между httpd и Tomcat). Если вы используете mod_proxy_http, Comet должен работать.

person Mark Thomas    schedule 05.08.2014
comment
Я уже использую mod_proxy_http, но обнаружил, что мне также нужно включить режим proxy_wstunnel и определить прокси для ws://whatever?websocket. Кажется, это решило мою проблему, спасибо в любом случае. - person tugcem; 06.08.2014
comment
proxy_wstunnel имеет довольно много ограничений. Это не будет работать во всех обстоятельствах, но хорошо, что это работает для вас. - person Mark Thomas; 29.08.2014