多人聊天的一个bug

songzhao831

public static function onGatewayMessage, 在这个函数里, 如果接收的数据格式错误, 返回false, 这时系统会踢掉客户端, 担客户端的状态是不对的, 没有被正常踢掉, 不能检测到这个断开.

2991 5 0
5个回答

walkor

这个不是bug,
onConnect返回false本来不会踢掉客户端

  • 暂无评论
songzhao831

那怎么处理这种情况, 就是协议出错的情况....

  • 暂无评论
walkor

Event::onGatewayMessage方法是用来分包的,如果在分包过程中发现协议不正确,renturn false就断开链接了

其它地方例如onMessage如果发现用户传递的数据格式不合法如何处理完全看你自己业务需要,可以通过Gateway::kick* 方法踢掉客户端链接,或者忽略不做任何处理,或者其它..

  • 暂无评论
songzhao831

我之前说错了, 就是Event::onGatewayMessage 这个地方有问题, 返回false时, 客户端没有显示被关掉. 客户端处于一个假死状态, 无法发出任何数据到服务端. 测试用的(网络调试助手 和 SocketTool)都是这样. 建议你验证一下.

  • 暂无评论
walkor

这个已经验证过N次了,
刚才又验证了下没有问题,Event::onGatewayMessage返回false会关闭对应的客户端的链接。

客户端没有显示被关掉可能是客户端的原因,建议你抓包确认下链接是否被关闭,不要太相信你的客户端。

  • 暂无评论
年代过于久远,无法发表回答
🔝