【问题标题】:a4j:push not using websockets and falling back to long-pollinga4j:push 不使用 websockets 并退回到长轮询
【发布时间】:2015-09-14 20:55:11
【问题描述】:

我在我的项目中使用 Richfaces 4.2.2,并且从this link 发现需要使用气氛 0.8.4 来实现兼容性。我能够让推送工作,但它使用长轮询而不是 websockets。 Webserver 是 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 控制台上看到的错误:

【问题讨论】:

  • 变量名称是RichFaces,但假设如果 Atmosphere 切换回长轮询,则未复制该部分,这意味着它没有找到对 WebSockets 的支持,您应该在控制台。
  • 感谢您的评论。是的,我在控制台中收到错误消息。它指出“Firefox 无法在 ws://localhost:8080/prj/__richfaces_push?__richfacesPushAsync=1&pushSessionId=ea0b3624-d7d1-4419-a856-4a8fefdab836 建立与服务器的连接。”。但是,我有最新的支持 websockets 的 firefox,webserver 是 JBoss 8,2,它也支持 websockets。请让我知道,如果您能指导我找出导致此错误的可能原因。
  • @Makhiel 如果有建议,请告诉我。我仍然面临这个问题。

标签: ajax jboss websocket richfaces long-polling


【解决方案1】:

看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版本。

【讨论】:

    猜你喜欢
    • 2017-11-30
    • 2013-08-11
    • 1970-01-01
    • 2012-07-07
    • 1970-01-01
    • 2012-05-25
    • 2012-06-12
    • 2012-10-22
    • 2019-05-28
    相关资源
    最近更新 更多