swoole2-用swoole搭建http服务器

本文详细解析了Swoole的进程模型,包括Manager、Worker和Task进程的作用,以及swoole服务器的执行流程和关键事件。同时,介绍了如何使用Swoole搭建HTTP服务器,包括代码示例和操作小技巧。

一.线程和进程的模型

swoole的线程/进程

启动swoole的时候会启动Manager进程和Master进程。对于Manager进程,用于管理Worker进程(我们业务层的逻辑代码一般
放在这里)和Task进程(用于在某个特定的时间或者条件下执行的代码)。对于Master进程,用于底层的开发,后面详细介绍.

二.swoole执行过程

执行过程图解

(1)swoole支持的常用的事件列表
事件名称作用
onStart在启动这个swoole服务器后触发这个事件
onShutdown在swoole服务器关闭时触发这个事件
onWorkerStartworker/task进程启动时触发这个事件
onWorkerStopworker/task进程退出时触发这个事件
onTask有新的任务等待执行
onFinish这个任务执行完成时触发这个事件
onRecive收到了客户端的消息时触发这个事件(重点)
onConnect客户端和服务端建立连接时触发这个事件
onClose客户端和服务端断开连接时触发这个事件
onRequest客户端发起http请求时触发这个事件
(2)swoole执行流程中的几个需要注意的点
1. 在这个swoole服务器启动后,会创建三个进程
	* Manager
	* Worker
	* Task
2.这个Manager进程是Worker进程的守护进程,在这个Worker进程意外结束后,这个Manager进程会重新启动Workder进
	程,Manager进程只有一个,而这个Worker可以有多个。
3.Worker进程通过给这个Task进程发送任务,可以把一些计算量大的任务转移到Task进程,这样我们的Worker进程就可以
	高速处理客户端的请求,提高并发量。
4.reactor线程是swoole底层处理高并发,最大限度的调用底层资源。

三.搭建http服务器

(1)代码说明

<?php
    //(1)创建swool的http服务器对象
    $serv = new swoole_http_server('0.0.0.0',8000);
    //(2)当浏览器链接点这个http服务器的时候,向浏览器发送helloworld
    $serv->on('request',function($request,$response){
        //(2.1)$request包含这个请求的所有信息,比如参数
        //(2.2)$response包含返回给浏览器的所有信息,比如helloworld
        var_dump($request);
        var_dump($response);
        //(2.3)向浏览器发送helloworld
        $response->end("hello world");
    });
    //(3)启动http服务器
    $serv->start();
(2)linux操作小提示
#1.查看进程
ps -aux | grep http-server.php
#2.批量杀死进程
kill -s 9 `ps -aux | grep http-server | awk '{print $2}'`
(3)swoole程序编写流程
1. 创建swoole服务器对象
2. 为这个对象设置回调函数
3. 启动swoole服务器
### ThinkPHP 中使用 think-swoole 扩展搭建 Swoole HTTP 服务器 #### 安装依赖 要使用 `think-swoole` 扩展来构建 Swoole HTTP 服务器,首先需要安装该扩展。可以通过 Composer 来完成安装过程[^1]。 ```bash composer require topthink/think-swoole ``` 此命令会自动下载并配置所需的依赖项到您的项目中。 --- #### 配置文件设置 在成功安装之后,您需要调整框架中的配置文件以支持 Swoole 的运行环境。通常情况下,这些配置位于 `config/swoole.php` 文件中。如果不存在,则可以手动创建它: ```php <?php return [ 'server' => [ 'host' => '0.0.0.0', // 绑定主机地址 'port' => 9501, // 端口号 'type' => 'http', // 服务类型:HTTP 或 WebSocket 'sock_type' => SWOOLE_SOCK_TCP, 'mode' => SWOOLE_PROCESS, ], ]; ``` 上述代码片段定义了一个基本的 HTTP 服务器参数,其中指定了绑定 IP 地址、端口以及协议类型等信息[^1]。 --- #### 启动脚本编写 为了启动 Swoole HTTP 服务器,在根目录下新增一个 PHP 脚本来执行初始化逻辑。例如命名为 `start_http.php`: ```php <?php use think\swoole\Http; require __DIR__ . '/vendor/autoload.php'; Http::run([ 'document_root' => './public', ]); ``` 这段程序通过调用 `think\swoole\Http::run()` 方法加载默认文档路径下的资源,并开启监听模式等待客户端请求到来[^1]。 --- #### 添加事件监听器(可选) 如果您希望进一步增强功能或者捕获特定生命周期内的动作,比如连接关闭时触发某些操作,则可以根据实际需求注册相应的回调函数。下面展示的是关于 Websocket 连接终止后的简单实现方式[^2]: ```php namespace app\listener; class WsClose { /** * 处理 WS 关闭事件. * * @param $event */ public function handle($event) { echo "WebSocket connection closed."; } } ``` 注意这里仅作为示范用途;对于普通的 HTTP 请求而言并不涉及此类场景应用。 --- #### 测试验证 最后一步就是确认一切正常工作与否——打开终端窗口输入如下指令即可让服务上线运行起来: ```bash php start_http.php start ``` 此时应该能够看到类似这样的提示消息表明进程已经开始运作:“[INFO] Server started successfully.” 接下来就可以利用浏览器或者其他工具访问指定 URL 地址测试效果啦! ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值