Я использую 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», если нет, то какой обходной путь для этого?