TP5.1+原生swoole完美整合,解决常见问题
Posted buinar
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TP5.1+原生swoole完美整合,解决常见问题相关的知识,希望对你有一定的参考价值。
1. 在tp框架根目录下建立server\http_server.php
文件
<?php
use Swoole\Http\Server as HttpServer;
$http = new HttpServer("127.0.0.1", 8811);
$http->set([
'worker_num' => 5,
'enable_static_handler' => true,
'document_root' => '/home/buinar/www/swoole/livematches/public/static',
//document_root目录下要放一个ico图标,为了防止浏览器请求ico图标时走下面的流程
'log_level' => SWOOLE_LOG_ERROR, // 日志等级 关闭开启debug
'trace_flags' => SWOOLE_TRACE_SERVER, // 日志等级 关闭开启debug
]);
$http->on('WorkerStart',function($server, $worker_id){
// 定义应用目录
define('APP_PATH', __DIR__ . '/../application/');
//加载框架引导文件
require __DIR__ . '/../thinkphp/base.php';
});
$http->on('request', function ($request, $response) use($http){
$_SERVER = [];
if (isset($request->server)) {
foreach ($request->server as $k => $v) {
$_SERVER[strtoupper($k)] = $v;
}
}
if (isset($request->header)) {
foreach ($request->header as $k => $v) {
$_SERVER[strtoupper($k)] = $v;
}
}
$_GET = [];
if (isset($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;
}
}
ob_start();
try {
// 执行应用并响应
\think\Container::get('app',[APP_PATH])->run()->send();
} catch (\Exception $e) {
echo $e->getMessage();
}
$res = ob_get_clean();
// var_dump($res);
$response->end($res);
// $http->close($response->fd); //关闭客户端连接,重新加载框架内容
});
$http->start();
2. 找到thinkphp/library/think/Request.php文件
function path 中的if (is_null($this->path)) {
与}
,这里不需要判断,只注释条件即可,里面的内容不动
function pathinfo中的if (is_null($this->pathinfo)) {
与}
,这里不需要判断,只注释条件即可,里面的内容不动
结尾:常见问题
1.报错:Fatal error: Uncaught think\exception\ErrorException: ob_end_clean(): failed to delete buffer.
加载框架不成功,检查自己是否写正确
2.echo会默认输出两次
这是因为document_root目录下没有ico文件,浏览器自动请求的,上面有解决方案
thinkphp5.1以上官方已经整合swoole了,建议用tp官网整合的swoole。
以上是关于TP5.1+原生swoole完美整合,解决常见问题的主要内容,如果未能解决你的问题,请参考以下文章
laravel 整合 swoole ,并简单 ab 测试对比性能以及在 PHPstorm 中利用debug调试配置swoole服务中的PHP代码
Elasticsearch学习 spring boot整合Elasticsearch的原生方式
Swoole 4.1.0 正式版发布,支持原生 Redis/PDO/MySQLi 协程化