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':
感谢分享,
个人精力有限,也希望越来越多的人能够分享自己的经验。
代码没完整吧?