0

我的应用程序订阅了一些广播 Bayeux 频道。它还通过 /meta/connect 侦听元通道以接收任何建议,以防任何连接失败。现在我的问题是我是否需要重新启动我的 Bayeux 客户端,即首先断开连接()并再次尝试握手()或者只有握手()调用就足以在我得到 reconnect=handshake 作为建议时恢复连接?

请对此发表评论以获取更多信息。

这就是我为bayeux客户端设置长轮询连接的方式

LongPollingTransport transport = new LongPollingTransport(options,
                httpClient) {
            @Override
            protected void customize(Request request) {
                request.header("Authorization", "OAuth " + accessToken);
            }
        };

现在,我通过请求标头传递的这个访问令牌具有一些刷新时间值。可以说是30分钟。这些是我所做的实现

第一次实施:

每 120 分钟我使用 client.unsubsrcibe 和 client re handshake() 但得到了非法状态异常。似乎需要断开连接才能重新握手,但不确定。因此,每 120 分钟重新启动一次客户端。但是这种方式监听器被删除可能是由于无效的 accessToken 因为我不是每 29 分钟更新一次。

第二次实施:

在每 29 分钟内,我使用重新登录获取新的连接 accessToken 以便在此自定义方法的每个回调中都将具有有效的令牌。

上述机制在一段时间后失败,并且监听器被丢弃。并从 meta/connect 获得以下信息

{"clientId":"4hi1pg62ce7bri39fnv3apg4j5ch","advice":{"reconnect":"handshake","interval":500},"channel":"/meta/connect","id":"103","error ":"403::未知客户端","成功":false}

{"clientId":"5atyxwdtyoggv4s1v3ce4dobm9u9","advice":{"reconnect":"handshake","interval":500},"channel":"/meta/connect","id":"2203","error ":"403::未知客户端","成功":false}

第三次实施:

在我的第二个实现中,我根据元/连接消息触发了 client.disconnect() 和 client.hanshake(),即每当我得到 reconnect = handshake 时,我都会断开连接并握手,它仍然可以正常工作,没有任何错误。

你能告诉我我错过了什么以及实现这些场景的正确方法应该是什么?

4

1 回答 1

0

你不需要做任何事情。

字段携带的信息由advice实现处理,因此您的应用程序(或任何应用程序)不应基于advice字段的信息执行任何操作。

对于应用程序,该advice字段只是提供信息。

于 2018-02-21T17:16:47.930 回答