PrimeFaces推与AWS(PrimeFaces push with AWS)

2019-10-21 16:38发布

我使用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”如果没有什么是该解决方法?

Answer 1:

目前的WebSocket没有与AWS支持。 该和身边的工作就是使用AWS EB负载均衡器与TCP / SSL。 我通过从HTTP改变协议在负载均衡器配置到TCP这样做。 但是,这不会单独工作,需要告诉豆茎直接的WebSocket的情况下进行沟通到tomcat。 这可以使用它可以在指定要添加的配置文件来完成这个职位。



Answer 2:

Primefaces 5.0的文档说,使用大气2.1.3。 你当我试图使用2.2.x的版本,我曾经有过类似的问题。 目前的版本我用的是2.1.4,它精美的作品对我来说。 也许你也可以试试这个。

另一种情况是,Firefox浏览器抛出WSS连接错误(但primepush作品反正)。 请同时参阅: https://bugzilla.mozilla.org/show_bug.cgi?id=594502



文章来源: PrimeFaces push with AWS