多人聊天的一个bug

0

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

已邀请:

walkor

赞同来自:

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

songzhao831 - 软硬通吃

赞同来自:

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

walkor

赞同来自:

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


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

songzhao831 - 软硬通吃

赞同来自:

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

walkor

赞同来自:

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


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

要回复问题请先登录注册