swoole基础-swoole之粘包问题
6029
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条评论
登录
后发布评论