text协议怎么解决粘包问题啊?

pfl18328314852

截图
服务器几乎分别同时向同一个客户端发送两条数据,有时候客户端得到的数据包是正常的(上面这个就是正常的)。有时候会把两条合并成一条数据发过来。导致json格式解析错误。我用的text协议。这个粘包问题我搜过其它帖子说的text协议自己已经处理了粘包,但是我发现我这边还是有这个问题,是哪里没有设置对吗?下面这个就是有时候会粘包的情况,两条合成一条了。
截图

2850 2 0
2个回答

walkor 打赏

应该是业务逻辑的问题。
比如服务端send的数据就是把2个数据合并在一起发送了。

  • pfl18328314852 2020-03-23

    // 向所有人发送
    $data['client_list']=$client_list;
    Gateway::sendToAll(json_encode($data)."\n");
    // 向当前client_id发送数据
    Gateway::sendToClient($client_id, "当前用户:$client_id said $message"."\n");
    就是先后发送两条数据。本身是不允许这样做吗?只能发送一条数据是不?

  • walkor 2020-03-23

    这样可以,前提是gatway使用了协议,如果是text协议,gatewayWorker里发送数据不需要手动加"\n"。另外js无法直接使用text协议。所以我不清楚你到底什么情况。

  • pfl18328314852 2020-03-23

    我用的node,可以使用text协议。我在当客户端发来消息时触发onMessage里面,向客户端发送消息Gateway::sendToAll()和Gateway::sendToClient()。客户端收到消息就会出现有时候粘包的现象,有时候又是正常的

  • walkor 2020-03-23

    因为node没有根据协议来分包导致的。node收到消息后根据换行符"\n"来分下包就好了。也就是说,你的node应该就是一个裸tcp,没有使用任何协议,没有做分包。

  • pfl18328314852 2020-03-24

    好的,明白了,谢谢了

xiasha11

客户端你做下分包处理啊

  • pfl18328314852 2020-03-24

    恩,我以为text协议客户端接收到的已经是分包处理了的,不需要客户端自行处理,现在明白了,还是需要处理

  • 八千年丶 2021-07-23

    需要约定 分包处理。

年代过于久远,无法发表回答
×
🔝