0

我使用 nopoll ( http://www.aspl.es/nopoll/ ) 让我的 C 应用程序与 Meteor 进行通信。

Meteor 会定期发送一些ping消息。当我的应用程序轮询 websocket 时,它会回复pong消息:一切都已找到。

接下来,为了避免轮询,我将其替换为初始化为sigaction(SIGIO, ...).

然后,当ping收到时,我发送pong,但有时,服务器停止发送ping并且无法交换其他消息。

ping和相关pong消息之间是否有任何超时。是否有任何机制可以向自己宣传连接丢失,原因nopoll_conn_is_ok()nopoll_conn_is ready()总是nopoll_true

4

1 回答 1

1

很难说为什么 Meteor 停止发送内容。但是,考虑您的情况有两点很有趣:

  1. 使用 noPoll 时,您不必每次收到 PING 时都发送 PONG,因为这是由 noPoll 的引擎自动完成的(参见 nopoll_conn.c:2453 中的 nopoll_conn_get_msg() 实现)。也许这导致 Meteor 失败。

  2. 关于获取连接关闭通知,使用 nopoll_conn_set_on_close(conn,handler,ptr) 在连接关闭时获取通知。在此处查看工作示例:https ://dolphin.aspl.es/svn/publico/nopoll/trunk/test/nopoll-regression-client.c

此致,

于 2015-08-15T12:13:14.940 回答