PrimeFaces推动AWS

时间:2015-01-23 11:31:15

标签: amazon-web-services primefaces tomcat7 atmosphere amazon-elb

我正在使用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连接到&#39; ws://example.com/primepush/service/push?X-Atmosphere-tracking-id = 0&amp; X-Atmosphere-Framework = 2.2.4-javascript&amp; X-Atmosphere-运输=网页套接字&安培; X - 大气-TrackMessageSize =真安培; X-ATMO协议=真&#39;失败:WebSocket握手期间出错:意外响应代码:501

发生此错误后,还有另一条错误消息

  

Websocket失败了。降级为Comet并重新发送push.js.xhtml?ln = primefaces&amp; v = 5.1:1   无法加载资源:服务器响应状态为501(未实施)http://example.com/primepush/service/push?X-Atmos ... ng&amp; X-Atmosphere-TrackMessageSize = true&amp; X-atmo-protocol = true&amp; _ = 1422008343786

在检查两个错误消息时,我发现p:socket组件失败并且传输为&#39; WebSocket&#39;并且它正在尝试使用长期投票&#39;这没有实现。所以我的问题是AWS是否支持&#39; WebSocket&#39;如果没有解决方法是什么?

2 个答案:

答案 0 :(得分:1)

目前AWS不支持WebSocket。我们的工作是使用AWS EB负载均衡器和TCP / SSL。我通过在loadbalancer配置中将协议从HTTP更改为TCP来实现此目的。但这不能单独工作,需要告诉beanstalk在websocket的情况下直接与tomcat通信。这可以使用配置文件来完成,该配置文件可以按照this post。

中的指定添加

答案 1 :(得分:-1)

Primefaces 5.0的文档说使用Atmosphere 2.1.3。当我尝试使用2.2.x版本时,我遇到了类似的问题。我使用的当前版本是2.1.4,它对我很好。也许你也可以尝试一下。

另一种情况是firefox浏览器抛出wss连接错误(但无论如何都是primepush工作)。 请参阅: https://bugzilla.mozilla.org/show_bug.cgi?id=594502