我使用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-大气跟踪-ID = 0&X-大气框架2.2.4 = JavaScript的&X-大气 - 运输= WebSocket的&X-大气 - TrackMessageSize =真X- ATMO协议=真”失败:错误的WebSocket握手期间:意外的响应代码:501
此错误后还有另一种错误信息
WebSocket的失败。 降级到Comet和重新发送push.js.xhtml LN = primefaces&V = 5.1:1未能加载资源:服务器用的501(未实现)状态回答http://example.com/primepush/service/push?X -Atmos ... NG&X-大气- TrackMessageSize =真&X-ATMO协议=真&_ = 1422008343786
在检查这两个错误信息,我发现号码:插座组件与运输为一体“的WebSocket”失败,它与未实施“长轮询”尝试。 所以我的问题是AWS是否支持“目前对WebSocket”如果没有什么是该解决方法?