我在 node.js 0.8.8 上使用 socket.io v9,最新的 Chrome 作为客户端。
我看到了一个非常奇怪的行为,昨天我花了大部分的 Indie Game Jam 来缩小范围。
问题发生在这部分服务器代码中:
this.msg('message', {message:'beta'});
this.msg('next_round', {players: this.make_player_list()});
this.msg('message', {message:'zeta'});
"this.msg" 是一个包装器,用于遍历套接字列表并在它们上调用 socket.emit()。
在此代码之前和之后也会发送消息。
在客户端上,我将看到直到并包括“消息”/“测试版”消息的所有消息。'next_round' 消息,以及在同一套接字上的任何消息,将不会在客户端上看到。
现在,奇怪的是:如果我将消息的名称更改为“nnnn_round”(并更新客户端上的消息处理程序连接),“nnnn_round”和之后的所有消息都可以正常通过。
因此,似乎一条名为“next_round”的消息会阻塞 socket.io 的服务器端机制。请注意,节点/套接字端的调试输出不显示正在写入套接字的 next_round 消息,但它确实显示了正在写入套接字的 nnnn_round 消息。
是否有任何文档可以解释这种行为?我在 socket.io 上找不到任何东西(无论如何它没有太多文档),并且在 socketio 模块源中对“next_round”的 grepping 出现了 emtpy。