tcp粘包

tcp粘包

3 回复

TCP连接服务器发送给客户端有时候发不出去,但客户端数据能发到服务器

提问walkor 回复了问题 • 2 人关注 • 2018-11-02 18:29 • 来自相关话题

2 回复

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

分享egirlasm 发表了文章 • 2 个评论 • 5023 次浏览 • 2016-11-17 15:42 • 来自相关话题

1.Workerman 是不会丢包的。 Workerman 的 TCP 协议会粘包。 然后我简单的写了一个 粘包处理,希望大家参考。 嗯嗯嗯,我分享这东西,就是为自己以后方便搜索。 下面是代码的一部分。测试时我在 ...查看全部

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':
2 回复

$connection->send 发快了会变成两条

提问walkor 回复了问题 • 2 人关注 • 2016-08-16 22:37 • 来自相关话题

3 回复

TCP连接服务器发送给客户端有时候发不出去,但客户端数据能发到服务器

回复

提问walkor 回复了问题 • 2 人关注 • 2018-11-02 18:29 • 来自相关话题

2 回复

$connection->send 发快了会变成两条

回复

提问walkor 回复了问题 • 2 人关注 • 2016-08-16 22:37 • 来自相关话题

2 回复

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

分享egirlasm 发表了文章 • 2 个评论 • 5023 次浏览 • 2016-11-17 15:42 • 来自相关话题

1.Workerman 是不会丢包的。 Workerman 的 TCP 协议会粘包。 然后我简单的写了一个 粘包处理,希望大家参考。 嗯嗯嗯,我分享这东西,就是为自己以后方便搜索。 下面是代码的一部分。测试时我在 ...查看全部

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':