0

这困扰了我将近两天。

我正在写 Bayeux 客户端。我使用来自 Jetty的 WebSocket 客户端库并连接到Faye服务器。

我使用握手请求打开到服务器的 WS 连接(所有 localhost):

{"channel":"/meta/handshake","supportedConnectionTypes":["long-polling","callback-polling","websocket"],"version":"1.0"}

客户端立即收到握手响应:

{"channel":"/meta/handshake","successful":true,"version":"1.0","supportedConnectionTypes":["long-polling","cross-origin-long-polling","callback-polling","websocket","eventsource","in-process"],"clientId":"l8xhgf0t5gikcukcknhr5npfx11s5w9","advice":{"reconnect":"retry","interval":0,"timeout":45000}}

然后客户端发送连接请求:

{"clientId":"l8xhgf0t5gikcukcknhr5npfx11s5w9","connectionType":"websocket","channel":"/meta/connect"}

然后服务器挂起 45s(超时的值),然后发送这个响应:

{"clientId":"l8xhgf0t5gikcukcknhr5npfx11s5w9","channel":"/meta/connect","successful":true,"advice":{"reconnect":"retry","interval":0,"timeout":45000}}

Faye 服务器挂起之前的最后一条日志消息:Ping "l8xhgf0t5gikcukcknhr5npfx11s5w9", 45

但我从来没有在客户端收到 Ping 帧。我不知道为什么服务器会在 45 秒内挂起,但我需要解决这个问题。你们中有人见过吗?非常感谢任何帮助/建议/提示:)

4

1 回答 1

1

您遇到的行为正是 Bayeux 服务器应该做的。

服务器不会“挂起”;它以长轮询方式保存请求。

我对 Faye 了解不多,但是定义了Bayeux 协议规范的CometD 项目以相同的方式实现了一个服务器,其中消息请求被保存为超时值。/meta/connect

于 2015-02-23T19:40:47.717 回答