swoole基础-swoole之粘包问题
6440
0
0
什么是粘包问题,为什么我们要讲这个看起来比较奇怪的问题呢?
不着急解释,我们先看一个例子
创建一个server,server端代码如下
<?php
class TcpBufferServer
{
private $_serv;
/**
* init
*/
public function __construct()
{
$this->_serv = new Swoole\Server("127.0.0.1", 9501);
$this->_serv->set([
'worker_num' => 1,
]);
$this->_serv->on('Receive', [$this, 'onReceive']);
}
public function onReceive($serv, $fd, $fromId, $data)
{
echo "Server received data: {$data}" . PHP_EOL;
}
/**
* start server
*/
public function start()
{
$this->_serv->start();
}
}
$reload = new TcpBufferServer;
$reload->start();server的代码很简单,仅仅是在收到客户端代码后,标准输出一句话而已,client的代码需要注意了,我们写了一个for循环,连续向server send三条信息,代码如下
<?php
$client = new swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_SYNC);
$client->connect('127.0.0.1', 9501) || exit("connect failed. Error: {$client->errCode}\n");
// 向服务端发送数据
for ($i = 0; $i < 3; $i++) {
$client->send("Just a test.\n");
}
$client->close();在未运行测试的情况下,我们期望server所在终端输出的结果应该是这样的
Server received data: Just a test. Server received data: Just a test. Server received data: Just a test.
注意哦,我们期望的结果是server被回调了3次,才有上述期望的结果值
实际运行的结果呢,是否与我们所期望的一致?我们看下

上图左边是server输出的信息。
我们看到,左侧显示的结果是server一次性输出的结果,按理论来说,client发起了3次请求,server应该跟我们期望的结果一致,会
还有85%的精彩内容,购买继续阅读
- 评论区
共26条评论
登录
后发布评论
