firefox - Primepush ...无法建立连接,Websocket关闭,原因: Connection was closed abnormally

标签 firefox google-chrome primefaces glassfish-3 atmosphere

我正在使用:

Linux
PrimeFaces 3.4.1
Glassfish 3.1.2.2(构建 5,启用 Comet,禁用 websockets)
火狐 10.0.7
Chrome 22.0.1229.94

我在消息驱动的 bean 中有 PrimePush。当我的 MDB 的 onMessage() 被调用时(应该是每秒几次),我期待咆哮通知出现。另外,不确定这是否重要,但 MDB 位于 *.ear 内的 *.jar 文件中,而 Web 应用程序也在 *.war 内。我在 MDB 中有 PrimePush,如下所示。

pushContext = PushContextFactory.getDefault().getPushContext();
pushContext.push("/notifications",
    new FacesMessage("Hello World", "New Notification"));

这是我的 web.xml。
<servlet>
    <servlet-name>Push Servlet</servlet-name>
    <servlet-class>org.primefaces.push.PushServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>Push Servlet</servlet-name>
    <url-pattern>/primepush/*</url-pattern>
</servlet-mapping>

问题是当我第一次将所有内容(glassfish、浏览器)清理干净时会触发一次通知,但通常不会再次出现或此后每次调用 pushContext.push() 时都不会出现。使用 FF,它甚至一次都不起作用。当 MDB onMessage() 触发时,不久之后我在 firefox 错误控制台中收到以下信息。
Error: Firefox can't establish a connection to the server at ws://localhost:8080/test/primepush/notifications?X-Atmosphere-tracking-id=0&X-Atmosphere-Framework=1.0&X-Atmosphere-Transport=websocket&X-Cache-Date=0.
Source File: http://localhost:8080/test/javax.faces.resource/push/push.js.xhtml?ln=primefaces
Line: 1  

使用 Chrome,它至少工作一次,有时但不可靠。每次加载网页时,我都会看到连接已关闭(就像我加载页面一样)。这是在错误控制台中。
Unexpected response code: 200 :8080:1
Websocket closed, reason: Connection was closed abnormally (that is, with no close frame being sent). push.js.xhtml:1
Websocket closed, wasClean: false push.js.xhtml:1
Websocket failed. Downgrading to Comet and resending  

这是我的 text.xhtml 页面。
<p:growl widgetVar="growl" showDetail="true"/>

<h:form id="myform">
    <p:fieldset id="myfs" legend="Push Test">
        <!-- stuff -->
    </p:fieldset>
</h:form>

<script type="text/javascript">
    function handleMessage(data) {
        data.severity = 'info';
        growl.show([data]);
    }
</script>

<p:socket onMessage="handleMessage" channel="/notifications">
</p:socket>

最佳答案

我遇到了同样的问题,在 glassfish 中启用 websockets 解决了我的问题(在启用 Comet-support 之后将以下内容添加到 domain.xml):

websockets-support-enabled="true"

提示是这样的:
Websocket failed. Downgrading to Comet and resending  

根据此处的文档http://www.primefaces.org/docs/vdl/3.4/primefaces-p/socket.html , websocket 是 primepush 中使用的默认方式,它需要在 glassfish 中启用 websockets。我认为在 p:socket 中将传输设置为 cometd (长轮询/流)也可能有效。

顺便说一句,我测试了:
Mac
PrimeFaces 3.4.2 with Atmosphere 1.0.8
Glassfish 3.1.2 (with comet enabled, websockets enabled)
FireFox 18
Chromium 24

关于firefox - Primepush ...无法建立连接,Websocket关闭,原因: Connection was closed abnormally,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13576168/

相关文章:

java - JSF-<h :commandButton> does not invoke new window from backing bean

javascript - 为什么将 focusout 与 jQuery 结合使用对 Firefox 有效,而使用 addEventListener 则无效?

css - 谷歌字体 Roboto,Firefox 和 Chrome 之间的区别,仅限我的电脑

css - Opera、Safari、FF 和 IE 之间的像素差异

google-chrome - _webSocketTraffic 的 Chrome 开发工具 .har 文件有一个 "time"字段——这是什么意思?

spring - JSF 操作未调用(一种情况有效,而第二种情况则无效)

java - 如何在 Netbeans 中从 Maven 安装 PrimeFaces?我收到警告,标签库 http ://primefaces. org/ui 不存在

internet-explorer - IE、火狐、Safari : Want to write Internet filter: Are there well known "hooks" that I can tie into?

firefox - 为什么 Firefox 将其 UI 界面配置文件命名为 : userChrome. css?

javascript - javascript变量名周围的{大括号}是什么意思