首页
下载
文档
问答社区
视频
捐赠
源代码
AI 助理
赞助商
CRMEB
Apipost
腾讯云
微擎
禅道
51Talk
商业产品
Swoole AI 智能文档翻译器
Swoole-Compiler PHP 代码加密器
CRMEB 新零售社交电商系统
登录
注册
全部
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
发表新帖
thinkphp5.0 接入swoole http 服务后 TPS 没有提升反而下降了?
如题,原本想利用swoole 的http 服务 提升tps 的,但现在接入后反而下降 ,有知道大概原因吗?找到一个方向。 ```php class HttpServer { /** * Swoole/Server 对象 * @var \Swoole\Http\Server|null */ protected $serv = null; /** * 监听IP * @var string */ protected $host = '0.0.0.0'; /** * 端口号 * @var int */ protected $port = 9505; //监听端口号 public function __construct() { $this->serv = new \Swoole\Http\Server($this->host, $this->port); $this->serv->set(array( 'worker_num' => 4, 'max_request' => 1000, 'daemonize' => 0, 'document_root' => __DIR__ . "/../public", 'debug_mode'=> 1, )); $this->serv->on('WorkerStart', function ($server, $worker_id) { define('APP_PATH', __DIR__ . '/../application/'); // 加载thinkphp5.0 框架的基础文件 require __DIR__ . '/../thinkphp/base.php'; }); //监听服务器启动事件 $this->serv->on('start', function ($server) { echo "Swoole http server is started"; }); $this->serv->on('request', function ($request, $response) { if ($request->server['path_info'] == '/favicon.ico' || $request->server['request_uri'] == '/favicon.ico') { $response->end(); return; } $response->header("Content-Type", "application/json;charset=utf8"); $_GET = []; if (isset($request->get)) { $_GET = $request->get; foreach ($request->get as $k => $v) { $_GET[$k] = $v; } } $_POST = []; if (isset($request->post)) { foreach ($request->post as $k => $v) { $_POST[$k] = $v; } } $_SERVER = []; if (isset($request->header)) { foreach ($request->header as $k => $v) { $_SERVER[$k] = $v; } } $_COOKIE = []; if (isset($request->cookie)) { foreach ($request->cookie as $k => $v) { $_COOKIE[$k] = $v; } } ob_start(); ob_clean(); // 执行应用并响应 try { // 2. 执行应用 \think\App::run()->send(); } catch (Exception $e) { } $res = ob_get_contents(); // ob_end_clean(); $response->end($res); }); //启动服务 $this->serv->start(); } } $httpServer = new HttpServer(); ```
发布于2年前 · 30 次浏览 · 来自
提问
mmmmmm
如题,原本想利用swoole 的http 服务 提升tps 的,但现在接入后反而下降 ,有知道大概原因吗?找到一个方向。 ```php class HttpServer { /** * Swoole/Server 对象 * @var \Swoole\Http\Server|null */ protected $serv = null; /** * 监听IP * @var string */ protected $host = '0.0.0.0'; /** * 端口号 * @var int */ protected $port = 9505; //监听端口号 public function __construct() { $this->serv = new \Swoole\Http\Server($this->host, $this->port); $this->serv->set(array( 'worker_num' => 4, 'max_request' => 1000, 'daemonize' => 0, 'document_root' => __DIR__ . "/../public", 'debug_mode'=> 1, )); $this->serv->on('WorkerStart', function ($server, $worker_id) { define('APP_PATH', __DIR__ . '/../application/'); // 加载thinkphp5.0 框架的基础文件 require __DIR__ . '/../thinkphp/base.php'; }); //监听服务器启动事件 $this->serv->on('start', function ($server) { echo "Swoole http server is started"; }); $this->serv->on('request', function ($request, $response) { if ($request->server['path_info'] == '/favicon.ico' || $request->server['request_uri'] == '/favicon.ico') { $response->end(); return; } $response->header("Content-Type", "application/json;charset=utf8"); $_GET = []; if (isset($request->get)) { $_GET = $request->get; foreach ($request->get as $k => $v) { $_GET[$k] = $v; } } $_POST = []; if (isset($request->post)) { foreach ($request->post as $k => $v) { $_POST[$k] = $v; } } $_SERVER = []; if (isset($request->header)) { foreach ($request->header as $k => $v) { $_SERVER[$k] = $v; } } $_COOKIE = []; if (isset($request->cookie)) { foreach ($request->cookie as $k => $v) { $_COOKIE[$k] = $v; } } ob_start(); ob_clean(); // 执行应用并响应 try { // 2. 执行应用 \think\App::run()->send(); } catch (Exception $e) { } $res = ob_get_contents(); // ob_end_clean(); $response->end($res); }); //启动服务 $this->serv->start(); } } $httpServer = new HttpServer(); ```
赞
0
分享
收藏
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
评论
2022-04-20
Rango
从`PHP-FPM`切换到`Swoole`性能提升主要是对象持久化带来的,`PHP-FPM`模式下,请求开始会初始化很多对象、数组、资源、TCP 连接(以下统称对象),在请求结束后会立即销毁,这带来了大量`CPU`和`内存`开销。 切换到`Swoole`之后,可以将与请求无关的对象保存在内存中持久化。尤其是现在`PHP`框架越来越重,像`Laravel`,一次请求会创建成百上千个对象,而绝大部分是可以常驻内存的,不需要随着请求创建销毁,这样就会带来巨大的性能提升。 但是如果你的程序只是简单地从`PHP-FPM`切换为`Swoole`,实际上无法获得性能提升。反而如果设置不当,如阻塞模式但是确开启了协程、进程数设置过低,反而性能还不如`PHP-FPM`。 另外需要知道`Swoole`提供的协程不能直接提升性能,协程是为了解决`IOWait`和高并发问题。避免一个慢查询导致整个系统崩溃。而且一个`Worker`进程可以同时并发地处理大量请求,而`PHP-FPM`一个请求同一时间只能处理一个请求,系统最大并发处理能力取决于所配置的进程数量。 而当`PHP-FPM`配置了数百、甚至数千个进程后,带来的进程切换开销(`context switch`)会非常大,操作系统有大量的`CPU`资源用于处理切换,变得低效。这时协程会提供比较客观的性能提升。
赞
0
回复
2022-04-21
Jessica
ThinkPHP有内存泄漏,随着访问量增加无限增长,你的QPS/TPS只会越来越低,两个解决办法,一个是定时/量重启,一个是找出泄露代码,怎么找,在哪里找,就靠你自己了
赞
0
回复
2022-04-22
13027******
可以使用 https://www.sw-x.cn/ 基于swoole 开发的简单好用 高性能
赞
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一直是同一个。没用使用到多进程啊。