首页
下载
文档
社区
视频
捐赠
开源项目
typephp
swoole
code-galaxy
swoole-cli
phpx
phpy
赞助商
AOT 编译器
AI 助理
商业产品
Swoole-Compiler 代码加密器
CRMEB 新零售社交电商系统
新加坡独享 Mac mini AI 工作站
登录
注册
全部
提问
分享
讨论
建议
公告
开发框架
TypePHP
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(); ```
发布于4年前 · 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
收藏
提问
分享
讨论
建议
公告
开发框架
TypePHP
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
回复