Swoole完美支持ThinkPHP51。首先,你需要打开http服务器。可以在thinkphp目录下创建一个server目录,在里面创建一个HTTPServerphp2。您需要在WorkerStart回调事件中做两件事来定义应用程序目录:define('APP_PATH',__DIR__.'/../application/');加载基本文件:需要__DIR__。'/../thinkphp/base.php';3.由于swoole接收get和post参数与thinkphp不同,需要转换成thinkphp可以识别,转换get参数的例子如下:注意事项:swoole对于超全局数组:$_SERVER,$_GET,$_POST、define等定义的常量不会被释放,需要先清除//清除$_GET=[];if(isset($request->get)){foreach($request->get作为$key=>$value){$_GET[$key]=$value;}}4、thinkphp会把module、controldevice和method放到一个变量中,所以通过pathinfo方式访问会有第一次只访问pathinfo的问题。worker进程中变量不会被注销的解决方法:thinkphp/library/think/Request.phpfunctionpathif(is_null($this->path)){}infunctionpathinfocommentordeleteif(is_null($this->pathinfo)){}commentordelete注意:只删除条件,不删除条件中的内容5.swoole支持thinkphp的http_server例子://面向进程的写法$http=newswoole_http_server('0.0.0.0',9501);$http->set([//启用静态资源请求'enable_static_handler'=>true,'document_root'=>'/opt/app/live/public/static','worker_num'=>5,]);/***Worker进程/Task进程启动时发生WorkerStart事件。这里创建的对象可以在进程生命周期中使用*目的:加载thinkphp框架中的内容*/$http->on('WorkerStart',function(swoole_server$server,$worker_id){//定义应用目录define('APP_PATH',__DIR__.'/../application/');//加载基础文件require__DIR__.'/../thinkphp/base.php';});$http->on('request',function($request,$response){//将swoole收到的信息转换成thinkphp可识别的$_SERVER=[];if(isset($request->server)){foreach($request->serveras$key=>$value){$_SERVER[strtoupper($key)]=$value;}}if(isset($request->header)){foreach($request->headeras$key=>$value){$_SERVER[strtoupper($key)]=$value;}}//swooleforsuperglobalarray:$_SERVER,$_GET,$_POST,define不会释放$_GET=[];if(isset($request->get)){foreach($request->getas$key=>$value){$_GET[$key]=$value;}}$_POST=[];if(isset($request->post)){foreach($request->postas$key=>$value){$_POST[$key]=$value;}}//ob函数输出打印ob_start();尝试{think\Container::get('app',[APP_PATH])->run()->send();$res=ob_get_contents();ob_end_clean();}catch(\Exception$e){//todo}$response->end($res);});$http->start();
