当前位置: 首页 > 后端技术 > PHP

SwooleHTTP的应用

时间:2023-03-30 00:32:07 PHP

概述这是Swoole学习的第四篇文章:SwooleHTTP的应用。第三部分:SwooleWebSocket的应用第二部分:Swoole任务的应用第一部分:SwooleTimer的应用我们都知道HTTP是一种允许WEB服务器和浏览器通过互联网发送和接收数据的协议。对HTTP的详细了解,可以找其他文章。我们在网上能看到的界面、图片、动画、音频、视频等都依赖于这个协议。WEB系统中已经使用了IIS、Apache、Nginx。我们也可以简单的使用Swoole实现一个WEB服务器。主要用到了HTTP的两大对象:Request请求对象和Response响应对象。Request,包括GET、POST、COOKIE、Header等。Response,包括状态、响应体、跳转、发送文件等。话不多说,分享两个程序:1、实现一个基础Demo:《你好,Swoole》。,Swoole。”示例效果:注:IP地址是我的虚拟机。示例代码:serv=newswoole_http_server("0.0.0.0",9502);$this->serv->set(['worker_num'=>2,//启动2个worker进程'max_request'=>4,//设置每个worker进程的max_request为4倍'daemonize'=>false,//守护进程(真/假)]);$this->serv->on('开始',[$this,'onStart']);$this->serv->on('WorkerStart',[$this,'onWorkStart']);$this->serv->on('ManagerStart',[$this,'onManagerStart']);$this->serv->on("请求",[$this,'onRequest']);$this->serv->start();}publicfunctiononStart($serv){echo"####onStart####".PHP_EOL;回声“SWOOLE”.SWOOLE_VERSION。“服务开始”.PHP_EOL;echo"master_pid:{$serv->master_pid}".PHP_EOL;echo"manager_pid:{$serv->manager_pid}".PHP_EOL;回声“########”.PHP_EOL.PHP_停产;}publicfunctiononManagerStart($serv){echo"####onManagerStart####".PHP_EOL.PHP_EOL;}publicfunctiononWorkStart($serv,$worker_id){echo"####onWorkStart####".PHP_EOL.PHP_EOL;}publicfunctiononRequest($request,$response){$response->header("Content-Type","text/html;charset=utf-8");$html="

你好Swoole.

";$响应->结束($html);}}$server=newServer();二、路由控制实例效果:目录结构:├─swoole_http--代码根目录│├─server.php│├─controller│├──Index.php│├──login.php示例代码:server.phpserv=newswoole_http_server("0.0.0.0",9501);$this->serv->set(['worker_num'=>2,//启动2个worker进程'max_request'=>4,//每个worker进程max_request设置为4次'document_root'=>'','enable_static_handler'=>吨rue,'daemonize'=>false,//守护进程(true/false)]);$this->serv->on('开始',[$this,'onStart']);$this->serv->on('WorkerStart',[$this,'onWorkStart']);$this->serv->on('ManagerStart',[$this,'onManagerStart']);$this->serv->on("请求",[$this,'onRequest']);$this->serv->start();}publicfunctiononStart($serv){echo"####onStart####".PHP_EOL;swoole_set_process_name('swoole_process_server_master');回声“SWOOLE”.SWOOLE_VERSION。"服务已启动".PHP_EOL;echo"master_pid:{$serv->master_pid}".PHP_EOL;echo"manager_pid:{$serv->manager_pid}".PHP_EOL;echo"########".PHP_EOL.PHP_EOL;}publicfunctiononManagerStart($serv){echo"####onManagerStart####".PHP_EOL.PHP_EOL;swoole_set_process_name('swoole_process_server_manager');}公共函数onWorkStart($serv,$worker_id){echo"####onWorkStart####".PHP_EOL.PHP_EOL;swoole_set_process_name('swoole_process_server_worker');spl_autoload_register(function($className){$classPath=__DIR__."/controller/".$className.".php";if(is_file($classPath)){require"{$classPath}";return;}});}publicfunctiononRequest($request,$response){$response->header("Server","SwooleServer");$response->header("Content-Type","text/html;charset=utf-8");$server=$request->server;$path_info=$server['path_info'];$request_uri=$server['request_uri'];如果($path_info=='/favicon.ico'||$request_uri=='/favicon.ico'){return$response->end();}$controller='索引';$方法='家';如果($path_info!='/'){$path_info=explode('/',$path_info);如果(!is_array($path_info)){$response->status(404);$response->end('URL不存在');}如果($path_info[1]=='favicon.ico'){返回;}$count_path_info=count($path_info);如果($count_path_info>4){$response->status(404);$response->end('URL不存在');$controller=(isset($path_info[1])&&!empty($path_info[1]))?$路径信息[1]:$控制器;$method=(isset($path_info[2])&&!empty($path_info[2]))?$路径信息[2]:$方法;}$result="类不存在";如果(class_exists($controller)){$class=new$controller();$result="方法不存在";如果(method_exists($controller,$method)){$result=$class->$method($request);}}$response->end($result);}}$server=新服务ver();Index.phpget)?$请求->获取:[];//@TODO业务代码$result="

你好,Swoole

";$result.="获取参数:".json_encode($get);返回$结果;}}Login.phppost)?$请求->发布:[];//@TODO业务代码返回"

登录成功

";}}总结1.Swoole可以替代Nginx吗?暂时不会,随着Swoole越来越强,以后就不一定了。官方推荐结合Nginx使用Swoole。HttpServer对Http协议的支持并不完善,建议只作为应用服务器使用。并在前端添加Nginx作为代理。可以根据自己的Nginx配置文件自行调整。例如:添加一个配置文件enable-swoole-php.conflocation~[^/]\.php(/|$){proxy_http_version1.1;proxy_set_header连接“保持活动状态”;proxy_set_headerX-Real-IP$remote_addr;proxy_passhttp://127.0.0.1:9501;}我们都习惯把虚拟域名的配置文件放在vhost文件夹下。例如虚拟域名的配置文件为:local.swoole.com.conf,可以选择加载enable-php.conf,也可以选择加载enable-swoole-php.conf。配置文件参考:server{listen80;#listen[::]:80;server_namelocal.swoole.com;indexindex.htmlindex.htmindex.phpdefault.htmldefault.htmdefault.php;root/home/wwwroot/project/swoole;#include重写/none.conf;#error_page404/404.html;#includeenable-php.conf;包含enable-swoole-php.conf;位置~.*\.(gif|jpg|jpeg|png|bmp|swf)${过期30天;}location~.*\.(js|css)?${过期12h;}location~/.well-known{允许所有;}位置~/\.{全部拒绝;}access_log/home/wwwlogs/local.swoole.com.log;也可以直接编辑服务器部分的代码。2、修改controller文件夹下的业务代码后,是不是每次都要重启服务才能生效?不会,每次重启服务都会影响正常用户,正常处理的请求会被强行关闭。在本地运行路由代码时,试试这个命令:psaux|grepswoole_process_server_master|awk'{print$2}'|xargskill-USR1向master进程发送一个USR1信号,当SwooleServer收到这个信号后,会在处理完当前请求后重启所有worker。如果你想查看所有进程,试试这个命令:ps-ef|grep'swoole_process_server'|grep-v'grep'需要文中源码的,关注公众号,回复“swoolehttp”。该插件可以尝试上传文件,做一个小型的FTP服务器。您可以尝试将其集成到您当前使用的PHP框架中。可以学习一些Swoole开源框架:EasySwoole、Swoft、One。推荐阅读系统详解-SSO单点登录系统详解-PHPWEB安全防御系统详解-PHP缓存技术系统详解-PHP接口签名验证系统详解-PHP浮点数高精度运算一起学习

最新推荐
猜你喜欢