[分享]解决 Workerman Tcp 丢包,粘包问题。

egirlasm

1.Workerman 是不会丢包的。

Workerman 的 TCP 协议会粘包。

然后我简单的写了一个 粘包处理,希望大家参考。
嗯嗯嗯,我分享这东西,就是为自己以后方便搜索。
下面是代码的一部分。测试时我在C++客户端加了index,收到的包很完整,顺序也是准确。

$tcp_worker->onMessage = function($tcp_connection, $data){

    global $sender_io,$global;

    //如果需要,可以在这里加 包头判断 if(substr($data,0,1) != "{") 包头不是括号时,才进行组包。这样可能更strong一点。
    if(!empty($global->IncompletePacket)){
        echo "HAVE SUB PACKET,PACKET MERGE!\n";
        echo "RECEIVED DATA\n";
        var_dump($data);
        echo "LASTED DATA\n";
        var_dump($global->IncompletePacket);
        echo "===PACKET MERGE START!===\n";
        $data = $global->IncompletePacket . $data;
        var_dump($data);
        echo "===PACKET MERGE END!===\n";
    }

        //var_dump($data);
    $json_data = json_decode($data,true);
    if($json_data == NULL){
        echo "INCOMPLETE PACKET\n";
        var_dump($data);
        $global->IncompletePacket = $data;
        return;
    }

    $global->IncompletePacket = NULL;

    switch ($json_data['msgtype']){
    case 'USAGE_INFO':
7801 2 1
2个评论

walkor

感谢分享,
个人精力有限,也希望越来越多的人能够分享自己的经验。

  • 暂无评论
啊哒梨

代码没完整吧?

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

egirlasm

2030
积分
0
获赞数
0
粉丝数
2016-11-17 加入
🔝