jsf - 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 中(热)重新部署,则会出现此错误:
使用 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
启用会话持久性 - 从服务器中删除应用程序
- 清理了服务器
- 启动了应用程序
当我按下按钮时,一切都按预期工作:
然后我在 bean 中做了一个小改动,服务器重新部署了应用程序。这显示在 Eclipse 控制台中。之后,我在浏览器中重新加载了应用程序。结果,第一张图片中的时间戳没有改变(会话持久性),但现在 websocket 流量在没有按下按钮的情况下淹没了控制台,并且没有结束:
我必须停止服务器以终止这种泛滥。
而且它消耗了大量的cpu:
火狐 88.0.1(64 位)
解决方案
推荐阅读
- c# - 将我的值类型转换为可为空的等价物
- azure - 在 Salesforce APEX 中实施 Azure Put Blob
- php - 使用 pre_get_posts 编辑影响 ACF 选项的 WooCommerce 商店循环
- keycloak - Keycloak 注册自定义所需操作
- android - Flutter:主从布局中的自定义 Appbar、浮动操作按钮和 BottomSheet
- functional-programming - SICP 3.6 - 兰德过程和局部状态变量
- javascript - Mocha 连接到错误的 javascript 文件
- javascript - 如何在 React 或 create-react-app 中列出源文件夹内容?
- php - 是否有用于 PHP 的 PostgreSQL SQL 查询字符串解析器?
- mysql - 如何从 Node.js 将汉字插入 MySQL 数据库?