首页
下载
文档
问答社区
视频
捐赠
源代码
AI 助理
赞助商
CRMEB
Apipost
腾讯云
微擎
禅道
51Talk
商业产品
Swoole AI 智能文档翻译器
Swoole-Compiler PHP 代码加密器
CRMEB 新零售社交电商系统
登录
注册
全部
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
发表新帖
用websocket编写的代码,怎么测试服务器能支持多少客户端连接?
刚刚完成一个安卓项目的即时通讯功能,后端服务器使用swoole的websocket实现。目前想测试一下单台服务器的并发量,看能支持多少安卓客户端的连接。看了官网的文章 “并发10万TCP连接的测试”后,使用c10k.php的代码进行测试: {{{ <?php $clients = array(); for($j = 0; $j < 1; $j++) { $pid = pcntl_fork(); if($pid > 0) { continue; } else { for($i = 0; $i < 1999; $i++){ $client = new swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_SYNC); //同步阻塞 $ret = $client->connect('127.0.0.1', 9501, -1); if(!$ret) { echo "#$i\tConnect fail. errno=".$client->errCode.'fd'.$i; die("\n"); } $clients[] = $client; //echo 'now clients nums is->'.count($clients).'\n'; usleep(10); } echo "Worker #".posix_getpid()." connect $i finish\n"; sleep(1000); exit; } } sleep(1000); }}} 每运行到100多的时候,就报错,信息如下: **swoole_client::connect(): connect to server[127.0.0.1:9501] failed. Error: Operation now in progress [115] in /opt/www/swoole-chat/c10k.php on line 14** 后来发现是超时时间设置太短,调大(将0.5秒换成了10秒)后继续测试,这次发现到500多才出现上面的错误。 请问: **1、swoole配置的参数是否设置不合理?服务器目前用的i7 4G普通PC机,swoole配置参数如下**: {{{ $setConfig = [ 'reactor_num' => 4,//主进程内时间处理线程的数量,默认cpu核心数 'worker_num' => 4,//根据cpu核心数设置 2倍左右 'task_worker_num' => 80,//根据每秒钟产生的task来计算 'daemonize' => FALSE,//守护进程化 'max_request' => 0,//最大请求 'dispatch_mode' => 2,//数据包分发策略 'heartbeat_idle_time' => 600,//心跳检测, 'heartbeat_check_interval' => 400,//启用心跳检测, 'debug_mode' => 1, 'package_max_length'=>3001000,//每个数据包长度最大不能超过3M 'log_file' => '/opt/www/swoole-chat/log/swoole.log', 'swoole_set_process_name'=>'swoole-master' ]; }}} **2、超时时间调大后支持的客户端确实多了些,客户端连接到500+就出现错误,是不是有问题?另外超时时间设置多大合适?** **3、项目采用websocket类提供推送服务,能用webbench、ab来测吗,目前用webbench测试发现request是0,是异步非阻塞造成的吗?** {{{ Speed=0 pages/min, 0 bytes/sec. Requests: 0 susceed, 0 failed. }}} 请高手帮忙回答一下,谢谢
发布于7年前 · 6 次浏览 · 来自
提问
产
产品技术-江鹏
刚刚完成一个安卓项目的即时通讯功能,后端服务器使用swoole的websocket实现。目前想测试一下单台服务器的并发量,看能支持多少安卓客户端的连接。看了官网的文章 “并发10万TCP连接的测试”后,使用c10k.php的代码进行测试: {{{ <?php $clients = array(); for($j = 0; $j < 1; $j++) { $pid = pcntl_fork(); if($pid > 0) { continue; } else { for($i = 0; $i < 1999; $i++){ $client = new swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_SYNC); //同步阻塞 $ret = $client->connect('127.0.0.1', 9501, -1); if(!$ret) { echo "#$i\tConnect fail. errno=".$client->errCode.'fd'.$i; die("\n"); } $clients[] = $client; //echo 'now clients nums is->'.count($clients).'\n'; usleep(10); } echo "Worker #".posix_getpid()." connect $i finish\n"; sleep(1000); exit; } } sleep(1000); }}} 每运行到100多的时候,就报错,信息如下: **swoole_client::connect(): connect to server[127.0.0.1:9501] failed. Error: Operation now in progress [115] in /opt/www/swoole-chat/c10k.php on line 14** 后来发现是超时时间设置太短,调大(将0.5秒换成了10秒)后继续测试,这次发现到500多才出现上面的错误。 请问: **1、swoole配置的参数是否设置不合理?服务器目前用的i7 4G普通PC机,swoole配置参数如下**: {{{ $setConfig = [ 'reactor_num' => 4,//主进程内时间处理线程的数量,默认cpu核心数 'worker_num' => 4,//根据cpu核心数设置 2倍左右 'task_worker_num' => 80,//根据每秒钟产生的task来计算 'daemonize' => FALSE,//守护进程化 'max_request' => 0,//最大请求 'dispatch_mode' => 2,//数据包分发策略 'heartbeat_idle_time' => 600,//心跳检测, 'heartbeat_check_interval' => 400,//启用心跳检测, 'debug_mode' => 1, 'package_max_length'=>3001000,//每个数据包长度最大不能超过3M 'log_file' => '/opt/www/swoole-chat/log/swoole.log', 'swoole_set_process_name'=>'swoole-master' ]; }}} **2、超时时间调大后支持的客户端确实多了些,客户端连接到500+就出现错误,是不是有问题?另外超时时间设置多大合适?** **3、项目采用websocket类提供推送服务,能用webbench、ab来测吗,目前用webbench测试发现request是0,是异步非阻塞造成的吗?** {{{ Speed=0 pages/min, 0 bytes/sec. Requests: 0 susceed, 0 failed. }}} 请高手帮忙回答一下,谢谢
赞
0
分享
收藏
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
评论
2017-11-04
张
张仁杰
首先你需要修改`ulimit -n`参数,调整允许的最大连接数。 ab, webbench这些工具不能压测WebSocket服务器,未设置`onRequest`回调,服务器会立即返回 403错误
赞
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一直是同一个。没用使用到多进程啊。