首页 > 解决方案 > 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 中(热)重新部署,则会出现此错误:

网络套接字

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>

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

在此处输入图像描述

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

在此处输入图像描述

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

而且它消耗了大量的cpu:

在此处输入图像描述

火狐 88.0.1(64 位)

标签: jsfwebsocketmojarrajsf-2.3

解决方案


推荐阅读