当前位置: 首页 > news >正文

Swoole协程系统HTTP服务

先启动宝塔 

/etc/init.d/bt start

源码参考

https://github.com/zhangyue0503/swoole/tree/main/4.Swoole%E5%8D%8F%E7%A8%8B

对于异步来说,我们需要监听事件,并且监听的进程是并发的,所以会有一个问题,那就是无法保证前后顺序。

$serv = new Swoole\Server("0.0.0.0", 9501);//监听连接进入事件
$serv->on('Connect', function ($serv, $fd) {Swoole\Coroutine\System::sleep(5);//此处sleep模拟connect比较慢的情况,这种sleep()是不阻塞的echo "onConnect", PHP_EOL;
});//监听数据接收事件
$serv->on('Receive', function ($serv, $fd, $reactor_id, $data) {echo "onReceive", PHP_EOL;
});//监听连接关闭事件
$serv->on('Close', function ($serv, $fd) {echo "Client: Close.\n";
});//启动服务器
$serv->start();

在这个例子中,我们通过在 Connect 事件中暂停5秒,来模拟 connect 可能出现连接比较慢的问题,然后再用 telnet 测试,就会发现 Receive 事件被先输出了出来。

[root@localhost source]# php 3.3Swoole协程系统.php
onReceive
onConnect

使用协程来提供 Http 服务

Swoole\Coroutine\run (function () {$server = new Swoole\Coroutine\Http\Server('0.0.0.0', 9501, false);$server->handle('/', function ($request, $response) {$response->end("<h1>Index</h1>");});$server->handle('/test', function ($request, $response) {$response->end("<h1>Test</h1>");});$server->handle('/stop', function ($request, $response) use ($server) {$response->end("<h1>Stop</h1>");$server->shutdown();});$server->start();
});

我们需要先建立一个协程容器,也就是这个 Swoole\Coroutine\run() 方法,这是一种开启协程容器的方式,其它的方式我们后面聊到了再说。这个协程容器是什么意思呢?它就像是一个 C 或者 Java 中的 main() 函数,提供程序的入口。

在协程服务中,我们真的不需要去监听事件了,只需要在这个协程容器的回调函数中实例化一个 Swoole\Coroutine\Http\Server 对象,然后通过它的 handle() 方法获得请求路径的内容,并交给回调函数进行处理即可。这里的回调函数中的参数与异步的 onRequest 监听中的回调参数是一样的,一个请求参数,一个响应参数。

http://www.lryc.cn/news/96735.html

相关文章:

  • SpringCloud学习路线(13)——分布式搜索ElasticSeach集群
  • CMIP6数据处理及在气候变化、水文、生态等领域中的应用
  • hadoop之mapreduce详解
  • leetcode做题笔记44
  • mac brew安装 node 踩坑日记- n切换node不生效
  • 数据预处理matlab
  • ubuntu18.04安装autoware1.15
  • 在CSDN学Golang云原生(Docker基础)
  • Zookeeper命令总结
  • C语言中的函数(超详细)
  • 华为H3C思科网络设备命令对照表
  • 产品需求、系统架构设计经验篇
  • 关于websocket的几点注意事项
  • go学习 4、复合数据类型
  • Rust: Vec类型的into_boxed_slice()方法
  • Python - Opencv + pyzbar实时摄像头识别二维码
  • 网络安全(黑客)就业分析指导
  • MySQL 主从复制的认识 2023.07.23
  • elasticsearch查询操作(API方式)
  • Java版企业工程项目管理系统源码+java版本+项目模块功能清单+spring cloud +spring boot
  • 理解Android中不同的Context
  • linux判断端口是否占用(好用)
  • springboot 自定义注解 ,实现接口限流(计数器限流)【强行喂饭版】
  • istio安装部署总结
  • Linux操作系统~必考面试题⑨
  • 国标GB28181协议视频平台EasyCVR修改录像计划等待时间较长的原因排查与解决
  • 线性代数(主题篇):第三章:向量组 、第四章:方程组
  • 大数据课程C4——ZooKeeper结构运行机制
  • 解决伪类元素‘after‘或者‘before‘遮挡父元素,导致鼠标移入或点击等事件不生效的问题
  • 电动汽车市场的减速,正在让小鹏汽车付出代价