1

Я использую PrimeFaces 5.0 и tomcat 7, и мое приложение находится в AWS. Я пытаюсь использовать PrimeFaces push. Я реализовал образец приложения и работает с моей локальной системой. Если я развожу код на AWS, это не сработает.PrimeFaces push с AWS

Xhtml код

<p:socket onMessage="jsFunctionToCall" channel="/service/push"/> 

web.xml

<filter> 
    <filter-name>shiroFilter</filter-name> 
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
    <init-param> 
     <param-name>targetFilterLifecycle</param-name> 
     <param-value>true</param-value> 
    </init-param> 
    <init-param> 
     <param-name>org.atmosphere.cpr.AtmosphereInterceptor</param-name> 
     <param-value>org.atmosphere.interceptor.ShiroInterceptor</param-value> 
     </init-param> 
    </filter> 
    <filter-mapping> 
    <filter-name>shiroFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
    </filter-mapping> 
    <servlet> 
     <servlet-name>Push Servlet</servlet-name> 
     <servlet-class>org.primefaces.push.PushServlet</servlet-class> 
     <load-on-startup>1</load-on-startup> 
     <async-supported>true</async-supported> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>Push Servlet</servlet-name> 
     <url-pattern>/primepush/*</url-pattern> 
    </servlet-mapping> 

Java код

@PushEndpoint("/service/push") 
public class ServicePushResource { 
    @OnMessage(encoders = {JSONEncoder.class}) 
    public String onMessage(String count) { 
     return count; 
    } 
} 

Pushing сообщение:

EventBus eventBus = EventBusFactory.getDefault().eventBus(); 
eventBus.publish("/service/push", String.valueOf("msg")); 

Я получаю сообщение об ошибке,

WebSocket подключение к «WS: //example.com/primepush/service/push X-Atmosphere по отслеживанию Ид = 0 & X-атмосфера-Framework = 2,2. 4-Javascript & Х-атмосфера-Транспорт = WebSocket & Х-атмосфера-TrackMessageSize = истинная & X-атмо-протокол = истина»не удалось: ошибка во время WebSocket квитирования: Неожиданный код ответа: 501

После этой ошибки там другое сообщение об ошибке, которое

Сбой веб-узла. ? Откат к комете и повторной push.js.xhtml п = primefaces & v = 5,1: 1 Не удалось загрузить ресурс: сервер ответил со статусом 501 (не реализовано) http://example.com/primepush/service/push?X-Atmos ... нг & X-атмосфера-TrackMessageSize = истина & X-атмо-протокол = истина & _ = 1422008343786

на осмотре как сообщения об ошибке, я обнаружил, что р: компонент сокета не удается с транспортом, как «WebSocket» и пытаются с «длинным опросом» который не реализован. Поэтому мой вопрос заключается в том, поддерживает ли AWS «WebSocket», если нет, что является обходным путем для этого?

+0

Какая у вас версия атмосферы? – robson

+0

Я использую атмосферу версии 2.2.4 –

ответ

1

В настоящее время WebSocket не поддерживается AWS. Работа должна заключаться в использовании нагрузочного баланса AWS EB с TCP/SSL. Я сделал это, изменив протокол с HTTP на TCP в конфигурации loadbalancer. Но это не будет работать в одиночку, нужно сказать beanstalk, чтобы напрямую общаться с tomcat в случае websocket. Это можно сделать, используя файл конфигурации, который можно добавить, как указано в сообщении this.

-1

Документация на Primefaces 5.0 гласит, что используется Атмосфера 2.1.3. У меня была схожая проблема с вами, когда я пытался использовать версию 2.2.x. Текущая версия, которую я использую, - 2.1.4, и она работает для меня отлично. Возможно, вы тоже можете попробовать это.

Другой случай, что браузер Firefox вызывает ошибку соединения wss (но в любом случае работает с перфорацией). См. Также: https://bugzilla.mozilla.org/show_bug.cgi?id=594502

+0

Я пробовал ваш ответ, но он не работает. Я использую прайс-листы 5.1, так как в документации я использовал атмосферу 2.2.2. Вы используете AWS. Я думаю, что Websocket не поддерживается в AWS. –

+0

Нет, я не использую AWS, но проблема была похожа на меня (похожие симптомы), поэтому я попробовал. – robson

Смежные вопросы