swoole学习04之tcp问题

swoole学习04之tcp问题

粘包的问题

TCP 在发送数据的时候,因为存在数据缓存的关系,对于数据在发送的时候 短时间内连续的发送很小的数据时候就有可能一次性一起发送。还有就是大数据会连续的分多次发送

解决方案

$server->set(array(
    'open_length_check' => true,
    'package_max_length' => 81920,
    'package_length_type' => 'N',
    'package_length_offset' => 8,
    'package_body_offset' => 16,
));

server

$server = new Swoole\Server("127.0.0.1", 9503);
$server->set([
   // 'heartbeat_idle_time'      => 20, // 表示一个连接如果20秒内未向服务器发送任何数据,此连接将被强制关闭
    //'heartbeat_check_interval' => 8,  // 表示每8秒遍历一次
    'open_length_check' => true,
    'package_max_length' => 81920,
    'package_length_type' => 'N',
    'package_length_offset' => 0,
    'package_body_offset' => 4,

]);
$server->on('connect', function ($server, $fd){
    echo "connection open: {$fd}\n";
});
$server->on('receive', function ($server, $fd, $reactor_id, $data) {
    echo "接收到消息".$data."\n";
});
$server->on('close', function ($server, $fd) {
    echo "connection close: {$fd}\n";
});
$server->start();

client

$client = new Swoole\Client(SWOOLE_SOCK_TCP );
if (!$client->connect('127.0.0.1', 9503, -1)) {
    exit("connect failed. Error: {$client->errCode}\n");
}
// 模拟粘包的问题
$data = "study day day up";
$len = pack("N",strlen($data));
for ($i=0;$i<100;$i++){
    $content = $len.$data;
    $client->send($content);
}
echo $client->recv();
echo "kkkk\r\n";
$client->close();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值