PrimeFaces продвигает с помощью AWS

Я использую PrimeFaces 5.0 и tomcat 7, и мое приложение находится в AWS. Я пытаюсь использовать толчок PrimeFaces. Я реализовал пример приложения, и оно работает с моей локальной системой. Если я разверну код на 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;
    }
}

Нажимая сообщение:

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

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

Соединение WebSocket с 'ws://example.com/primepush/service/push?X-Atmosphere-tracking-id=0&X-Atmosphere-Framework=2.2.4-javascript&X-Atmosphere-Transport=websocket&X-Atmosphere-TrackMessageSize=true&X- atmo-protocol = true 'не удалось: ошибка во время рукопожатия WebSocket: неожиданный код ответа: 501

После этой ошибки появляется другое сообщение об ошибке, которое

Не удалось выполнить веб-сокет. Переход на Comet и повторная отправка push.js.xhtml?ln=primefaces&v=5.1:1 Не удалось загрузить ресурс: сервер ответил со статусом 501 (не реализовано) http://example.com/primepush/service/push?X-Atmos…ng&X-Atmosphere-TrackMessageSize=true&X-atmo-protocol=true&_ =1422008343786

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


person Vineeth NG    schedule 23.01.2015    source источник
comment
Какая у вас версия атмосферы?   -  person robson    schedule 26.01.2015
comment
Я использую атмосферу версии 2.2.4   -  person Vineeth NG    schedule 26.01.2015


Ответы (2)


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

person Vineeth NG    schedule 02.02.2015

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

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

person robson    schedule 26.01.2015
comment
Я попробовал ваш ответ, но он не работает. Я использую Primefaces 5.1, поэтому, согласно документации, я использовал атмосферу 2.2.2. Вы используете AWS. Я думаю, что Websocket не поддерживается в AWS. - person Vineeth NG; 28.01.2015
comment
Нет, я не пользуюсь AWS, но у меня проблема выглядела похожей (похожие симптомы), поэтому я попробовал. - person robson; 28.01.2015