微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JSF 2.3.15 Mojarra:Websocket 试图无限地重新连接而不是有限地重新连接

如何解决JSF 2.3.15 Mojarra:Websocket 试图无限地重新连接而不是有限地重新连接

https://github.com/eclipse-ee4j/mojarra/issues/4572#issuecomment-822392768 中所述,Websocket 错误“Websocket 试图无限地而不是有限地重新连接(由于浏览器特定的错误)”显然在 2.3.15 版本中没有修复。我已经在 WildFly 21.0.0.Final 中尝试了这个版本,手动添加了 2.3.15 Mojarra,结果相同。如果在 Eclipse 中(热)重新部署应用程序,则会发生此错误

websocket

websocket2

使用 Eclipse 4.18、WildFly 21.0.0.Final 和手动添加的 JSF 2.3.15 Mojarra、Firefox 62.0.3 或 MS Edge 90.0.818 进行测试

豆子:

@Named
@ViewScoped
public class FooBean implements Serializable {
    private static final long serialVersionUID = -9057373496036307133L;
    @Inject
    @Push
    private PushContext fooChannel;

    public void test() {
        fooChannel.send("Test");
    }
}

小面:

<f:websocket channel="fooChannel" onmessage="function(m){ ... }" scope="session" />

bean 是 ViewScoped 还是 SessionScoped 并不重要。

有人遇到过这个问题吗?

另见打开的错误 https://github.com/eclipse-ee4j/mojarra/issues/4933

更新 1

(20.05.2021)

现在我尝试了以下方法

豆子:

@Named
@SessionScoped
public class FooBean implements Serializable {
    private static final long serialVersionUID = -9057373496036307133L;
    @Inject
    @Push
    private PushContext fooChannel;
    private Date date = new Date();

    public void test() {
        fooChannel.send("Test");
    }
    
    public String getDate() {
        return date.toString();
    }
}

小面:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://xmlns.jcp.org/jsf/html"
    xmlns:f="http://xmlns.jcp.org/jsf/core">
<h:head>
</h:head>
<h:body>
    <h:outputText value="#{fooBean.date}" />

    <h:form>
        <h:commandButton action="#{fooBean.test()}" value="Send">
            <f:ajax />
        </h:commandButton>
    </h:form>

    <f:websocket channel="fooChannel"
        onmessage="function(m){ console.log(m); }" scope="session" />
</h:body>
</html>
  • <distributable/> 中设置 web.xml 以启用会话持久性
  • 从服务器上删除了应用程序
  • 清理服务器
  • 启动应用程序

当我按下按钮时,一切都按预期工作:

enter image description here

然后我对 bean 进行了一些小的更改,服务器重新部署了该应用程序。这显示在 Eclipse 控制台中。之后,我在浏览器中重新加载了应用程序。结果,第一张图片的时间戳没有改变(会话持久性),但现在 websocket 流量在没有按下按钮的情况下淹没了控制台并且不会结束:

enter image description here

我必须停止服务器才能终止这种泛滥。

而且它消耗大量cpu

enter image description here

Firefox 88.0.1(64 位)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。