首页
下载
文档
问答社区
视频
捐赠
源代码
AI 助理
赞助商
CRMEB
Apipost
腾讯云
微擎
禅道
51Talk
商业产品
Swoole AI 智能文档翻译器
Swoole-Compiler PHP 代码加密器
CRMEB 新零售社交电商系统
登录
注册
全部
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
发表新帖
协程方式压测websocket报错
### 问题描述 协程方式压测websocket,执行是否报这个错误 **Warning: go(): exceed max number of coroutine 100000 in /data/index.php on line 25 PHP Warning: go(): exceed max number of coroutine 100000 in /data/index.php on line 21** ### Swoole版本,PHP版本,以及操作系统版本信息 swoole:4.5.1 php:7.4 ### 相关代码 ```php <?php $s = microtime(true); Co\run(function (){ $time = time(); $chan = new Swoole\Coroutine\Channel(10); for ($i = 0; $i < 2000; $i++) { for ($j = 0; $j < 30; $j++) { go(function() use($chan) { $client = new Swoole\Coroutine\Http\Client('127.0.0.1', 9501); $ret = $client->upgrade("/"); if ($ret) { $client->push("test"); $recv = $client->recv(); $chan->push($recv); $client->close(); } }); go(function() use ($chan) { $chan->pop(); // co::sleep(0.01); }); } co::sleep(0.01); } }); echo 'use ' . (microtime(true) - $s) . ' s'; ``` ### 你期待的结果是什么?实际看到的错误信息又是什么? 协程方式为何受限于端口数量
发布于4年前 · 4 次浏览 · 来自
提问
highkick
### 问题描述 协程方式压测websocket,执行是否报这个错误 **Warning: go(): exceed max number of coroutine 100000 in /data/index.php on line 25 PHP Warning: go(): exceed max number of coroutine 100000 in /data/index.php on line 21** ### Swoole版本,PHP版本,以及操作系统版本信息 swoole:4.5.1 php:7.4 ### 相关代码 ```php <?php $s = microtime(true); Co\run(function (){ $time = time(); $chan = new Swoole\Coroutine\Channel(10); for ($i = 0; $i < 2000; $i++) { for ($j = 0; $j < 30; $j++) { go(function() use($chan) { $client = new Swoole\Coroutine\Http\Client('127.0.0.1', 9501); $ret = $client->upgrade("/"); if ($ret) { $client->push("test"); $recv = $client->recv(); $chan->push($recv); $client->close(); } }); go(function() use ($chan) { $chan->pop(); // co::sleep(0.01); }); } co::sleep(0.01); } }); echo 'use ' . (microtime(true) - $s) . ' s'; ``` ### 你期待的结果是什么?实际看到的错误信息又是什么? 协程方式为何受限于端口数量
赞
0
分享
收藏
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
评论
2020-10-16
鲁飞
设置`max_coroutine`即可。默认100000
赞
0
回复
2020-10-16
highkick
回复
鲁飞
请问服务端这样是否也需要设置max_coroutine ``` function getObjectId(\Swoole\Http\Response $response) { if (PHP_VERSION_ID < 70200) { $id = spl_object_hash($response); } else { $id = spl_object_id($response); } return $id; } Co::set([ 'hook_flags'=> SWOOLE_HOOK_ALL, 'heartbeat_check_interval' => 3 ]); Co\run(function (){ $server = new Co\Http\Server("0.0.0.0", 9501, false); $chan = new Swoole\Coroutine\Channel(10); $server->handle('/ws', function ($request, $ws) use ($chan) { $ws->upgrade(); global $wsObjects; $wsObjects[getObjectId($ws)] = $ws; $i = 0; while (true) { $frame = $ws->recv(); $pingFrame = new Swoole\WebSocket\Frame; $pingFrame->opcode = WEBSOCKET_OPCODE_PONG; $ws->push($pingFrame); if ($frame === '' or $frame->data === '') { $ws->close(); break; } else if ($frame === false) { echo "error : " . swoole_last_error() . "\n"; break; } else { if ($frame->data == 'close') { $ws->close(); return; } $ws->push("fd: ".$frame->fd. "this is test message:".rand(1000, 9999), 2); } } }); $server->start(); }); ```
赞
0
回复
微信公众号
热门内容
作者其它话题
- 进程(9501端口)一段时间后退出;
- redis抛出异常。如何优化下面代码。
- $ws为何获取不到数据
- 进程(9501端口)一段时间后会自己退出;
暂无回复的问答
- 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一直是同一个。没用使用到多进程啊。