a4j:push未使用WebSockets并回退到长轮询。

4
我正在使用Richfaces 4.2.2进行项目开发,并从this link了解到需要使用atmosphere 0.8.4以确保兼容性。我能够使推送功能正常工作,但它是使用长轮询而不是WebSockets。Web服务器是Jboss 8.2(undertow)。
以下配置已完成以实现此目的:
<context-param>
    <param-name>org.richfaces.push.initializeOnStartup</param-name>
    <param-value>true</param-value>
</context-param>
 <context-param>  
    <param-name>org.atmosphere.useBlocking</param-name>  
    <param-value>true</param-value>  
 </context-param> 

在服务器端,使用推送通知向客户端发送消息。

TopicKey topicKey = new TopicKey(key);
TopicsContext topicsContext = TopicsContext.lookup();
topicsContext.publish(topicKey, message);

在客户端,通知以以下方式接收。我已添加脚本块以使用传输推送作为WebSocket,但似乎失败了。
<script>
   RichFaces.Push.transport = "websocket";  
   RichFaces.Push.fallbackTransport = "long-polling";  
</script>  

<a4j:region>
    <a4j:push address="update">
        <a4j:ajax event="dataavailable" render="someelements"/>
    </a4j:push>
</a4j:region>

请问有人能指导我缺失的配置吗?还是说当前版本的richfaces/atmosphere只支持长轮询作为传输机制的限制?

在JavaScript控制台上看到的错误:

enter image description here


变量名为 RichFaces,但假设如果 Atmosphere 切换回长轮询,则意味着它没有找到对 WebSockets 的支持,您应该在控制台中看到一条消息。 - Makhiel
感谢您的评论。是的,我在控制台中收到了错误消息。它指出“Firefox无法与ws://localhost:8080/prj/__richfaces_push?__richfacesPushAsync=1&pushSessionId=ea0b3624-d7d1-4419-a856-4a8fefdab836建立连接。”但是,我有最新的支持WebSockets的Firefox浏览器,而Web服务器是JBoss 8.2,也支持WebSockets。请告诉我,如果您能够指导我找到此错误的可能原因。 - A.G.
@Makhiel,请告诉我有什么建议。我仍然遇到了问题。 - A.G.
1个回答

0

看一下版本为4.2.2.Final的push.js,

richfaces.Push.transport = "long-polling";// "websocket";
richfaces.Push.fallbackTransport = undefined;//"long-polling";

应该使用richfaces而不是RichFaces。注意大小写敏感性。

我不确定为什么websocket被有意注释掉了。相同的代码适用于版本4.3.7.Final,但对于版本4.5.7.Final,websocket不再被注释掉。因此,我建议您升级到版本4.5.7。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接