首页
下载
文档
问答社区
视频
捐赠
源代码
AI 助理
赞助商
CRMEB
Apipost
腾讯云
微擎
禅道
51Talk
商业产品
Swoole AI 智能文档翻译器
Swoole-Compiler PHP 代码加密器
CRMEB 新零售社交电商系统
登录
注册
全部
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
发表新帖
tcp服务器协程风格 接受消息会合并消息内容
### TCP服务器协程风格 ### Swoole4,PHP7.3,linux系统 ### 相关代码 ```php <?php use Swoole\Process; use Swoole\Coroutine; use Swoole\Coroutine\Server\Connection; //多进程管理模块 $pool = new Process\Pool(2); //让每个OnWorkerStart回调都自动创建一个协程 $pool->set(['enable_coroutine' => true]); $pool->on('workerStart', function ($pool, $id) { //每个进程都监听9501端口 $server = new Swoole\Coroutine\Server('0.0.0.0', 9501, false, true); //收到15信号关闭服务 Process::signal(SIGTERM, function () use ($server) { $server->shutdown(); }); //接收到新的连接请求 并自动创建一个协程 $server->handle(function (Connection $conn) { while (true) { //接收数据 $data = $conn->recv(1); if ($data === '' || $data === false) { $errCode = swoole_last_error(); $errMsg = socket_strerror($errCode); echo "errCode: {$errCode}, errMsg: {$errMsg}\n"; $conn->close(); break; } //发送数据 $conn->send('heart'); if($data!='heart'){ var_dump("消息".$data); } Coroutine::sleep(1); } }); //开始监听端口 $server->start(); }); $pool->start(); ``` ### $data = $conn->recv(1)这里接受消息的时候 如果客户端频繁发送消息 接受的消息会合并 string(16) "消息heartceshi" string(31) "消息heartceshiceshiceshiceshi" string(31) "消息heartceshiceshiceshiceshi" string(26) "消息heartceshiceshiceshi" string(36) "消息heartceshiceshiceshiceshiceshi" string(31) "消息heartceshiceshiceshiceshi" string(31) "消息heartceshiceshiceshiceshi" string(26) "消息heartceshiceshiceshi" string(16) "消息heartceshi" string(26) "消息heartceshiceshiceshi" string(36) "消息heartceshiceshiceshiceshiceshi" string(31) "消息heartceshiceshiceshiceshi" string(36) "消息ceshiheartceshiceshiceshiceshi" string(36) "消息heartceshiceshiceshiceshiceshi" string(31) "消息heartceshiceshiceshiceshi" string(36) "消息heartceshiceshiceshiceshiceshi" string(16) "消息heartceshi" 客户端发送的消息是有heart和多次发送 ceshi 字符串 接受这里就会合并请问这个是正常的吗 如何解决
发布于2年前 · 9 次浏览 · 来自
提问
菏
菏泽领创网络
### TCP服务器协程风格 ### Swoole4,PHP7.3,linux系统 ### 相关代码 ```php <?php use Swoole\Process; use Swoole\Coroutine; use Swoole\Coroutine\Server\Connection; //多进程管理模块 $pool = new Process\Pool(2); //让每个OnWorkerStart回调都自动创建一个协程 $pool->set(['enable_coroutine' => true]); $pool->on('workerStart', function ($pool, $id) { //每个进程都监听9501端口 $server = new Swoole\Coroutine\Server('0.0.0.0', 9501, false, true); //收到15信号关闭服务 Process::signal(SIGTERM, function () use ($server) { $server->shutdown(); }); //接收到新的连接请求 并自动创建一个协程 $server->handle(function (Connection $conn) { while (true) { //接收数据 $data = $conn->recv(1); if ($data === '' || $data === false) { $errCode = swoole_last_error(); $errMsg = socket_strerror($errCode); echo "errCode: {$errCode}, errMsg: {$errMsg}\n"; $conn->close(); break; } //发送数据 $conn->send('heart'); if($data!='heart'){ var_dump("消息".$data); } Coroutine::sleep(1); } }); //开始监听端口 $server->start(); }); $pool->start(); ``` ### $data = $conn->recv(1)这里接受消息的时候 如果客户端频繁发送消息 接受的消息会合并 string(16) "消息heartceshi" string(31) "消息heartceshiceshiceshiceshi" string(31) "消息heartceshiceshiceshiceshi" string(26) "消息heartceshiceshiceshi" string(36) "消息heartceshiceshiceshiceshiceshi" string(31) "消息heartceshiceshiceshiceshi" string(31) "消息heartceshiceshiceshiceshi" string(26) "消息heartceshiceshiceshi" string(16) "消息heartceshi" string(26) "消息heartceshiceshiceshi" string(36) "消息heartceshiceshiceshiceshiceshi" string(31) "消息heartceshiceshiceshiceshi" string(36) "消息ceshiheartceshiceshiceshiceshi" string(36) "消息heartceshiceshiceshiceshiceshi" string(31) "消息heartceshiceshiceshiceshi" string(36) "消息heartceshiceshiceshiceshiceshi" string(16) "消息heartceshi" 客户端发送的消息是有heart和多次发送 ceshi 字符串 接受这里就会合并请问这个是正常的吗 如何解决
赞
0
分享
收藏
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
评论
2022-04-25
Rango
需要设置协议处理,可使用 EOF 或者 Length 自动协议处理
赞
0
回复
微信公众号
热门内容
暂无回复的问答
- CodeGalaxy K3s 轻量集群节点之间如何实现负载均衡
- 关于openssl CURL WARNING swSSL_connect: SSL_connect(fd=69) failed. Error: error:141A318A:SSL routines:tls_process_ske_dhe:dh key too small[1|394]
- 多个模型如何进行事务异常回退?
- websocket开启wss报错
- 协程tcp服务器如何使用多进程?recv()方法接收信息,打印出来的pid一直是同一个。没用使用到多进程啊。