我使用nopoll(http://www.aspl.es/nopoll/)为我的C应用程序与Meteor进行通信。
流星定期发送一些ping
消息。
当我的应用程序轮询websocket时,它会回复pong
消息:一切都找到了。
接下来,为避免轮询,我将其替换为使用sigaction(SIGIO, ...)
初始化的回调。
然后,当收到ping
时,我发送pong
,但有时,服务器停止发送ping
,并且不能交换任何其他消息。
ping
与关联的pong
消息之间是否有任何超时。
是否有任何机制可以宣传自己的连接丢失,因为nopoll_conn_is_ok()
和nopoll_conn_is ready()
始终是nopoll_true
。
答案 0 :(得分:1)
很难说Meteor为何停止发送内容。但是,有两点值得考虑你的情况:
使用noPoll时,每次收到PING时都不必发送PONG,因为这是由noPoll的引擎自动完成的(请参阅nopoll_conn.c:2453中的nopoll_conn_get_msg()实现)。也许这会导致Meteor失败。
关于获取连接关闭通知,使用nopoll_conn_set_on_close(conn,handler,ptr)在连接关闭时收到通知。请参阅此处的工作示例:https://dolphin.aspl.es/svn/publico/nopoll/trunk/test/nopoll-regression-client.c
最诚挚的问候,