我们已经实现了使用CometD长轮询在JBoss容器上运行的Java servlet。在一些组织中已经实现了这一点,没有任何问题,但是在最近的实现中,存在一些功能问题,这些问题似乎与该组织的网络设置有关。

具体来说,大约有5%的时间,连接请求返回了402错误:

{"id":"39","error":"402::Unknown client","successful":false,"advice":{"interval":0,"reconnect":"handshake"},"channel":"/meta/connect"}


让该组织解决网络性能是一项巨大的挑战,因此我们正在寻找一种方法来调整实施以减少这些问题。

可以更新哪些cometd配置参数来改善这一点?
maxinterval,超时,multiSessionInverval等?

谢谢!

最佳答案

“ 402未知客户端”错误是由于服务器看不到来自客户端的/meta/connect心跳消息而使服务器上的对应会话到期而导致的。这通常是由于网络问题。

一旦客户端网络恢复,客户端将发送/meta/connect心跳消息,但服务器没有对应的会话,因此为402。

控制会话的服务器端到期的参数是maxInterval,在此处记录:https://docs.cometd.org/current/reference/#_java_server

默认情况下是10秒。如果增加它,则意味着您将在服务器内存会话中保留更长的时间,因此需要考虑到这一点。

07-24 15:20