Swoole 中使用 HTTP 异步服务器、HTTP 协程服务器
HTTP 异步风格服务器
# http_server.php
$http = new Swoole\Http\Server("0.0.0.0", 9501);
// 设置服务器运行参数
$http->set(array(
'daemonize' => 1, // 作为守护进程运行,需同时设置log_file
'log_file' => '/www/logs/swoole.log', // 指定标准输出和错误日志文件
'worker_num' => 4, // 设置启动的工作进程数,默认为CPU核数,全异步IO可以设置为 CPU 核数的 1-4 倍
));
// HTTP 服务器只需要监听 onRequest 事件
$http->on('request', function ($request, $response) {
// 响应 favicon.ico 请求
if ($request->server['path_info'] == '/favicon.ico' || $request->server['request_uri'] == '/favicon.ico') {
$response->end();
return;
}
var_dump($request->get, $request->post);
// URL路由器
list($controller, $action) = explode('/', trim($request->server['request_uri'], '/'));
if (empty($controller)) {
$controller = 'IndexController';
}
if (empty($action)) {
$action = 'index';
}
(new $controller)->$action($request, $response);
});
class IndexController {
public function index($request, $response) {
$rand = rand(1000, 9999);
$response->header("Content-Type", "text/html; charset=utf-8");
// 输出一段 HTML 内容
$response->end("<h1>Hello Swoole. #{$rand}</h1>");
}
}
// 启动 HTTP 服务器
$http->start();
运行并测试 HTTP 异步风格服务器
# 如果程序已经运行,先结束进程
kill -9 11591
# 在 cli 命令行环境运行服务端
php http_server.php
# 查看服务器监听的端口
netstat -an | grep 9501
# 访问 http://127.0.0.1:9501 查看程序的结果
curl http://127.0.0.1:9501
# 使用 Apache bench 工具进行压力测试
ab -c 200 -n 200000 -k http://127.0.0.1:9501/
使用 Nginx 作为代理
server {
root /wwwroot/swoole_demo/;
server_name local.swoole.com;
location / {
proxy_http_version 1.1;
proxy_set_header Connection "keep-alive";
proxy_set_header X-Real-IP $remote_addr;
if (!-e $request_filename) {
proxy_pass http://127.0.0.1:9501;
}
}
}
HTTP 协程风格服务器
Co\run(function () {
$server = new Co\Http\Server("127.0.0.1", 9501, false);
// 设置服务器运行参数
$server->set(array(
'daemonize' => 1, // 作为守护进程运行,需同时设置log_file
'log_file' => '/www/logs/swoole.log', // 指定标准输出和错误日志文件
));
$server->handle('/', function ($request, $response) use ($server) {
// URL路由器
list($controller, $action) = explode('/', trim($request->server['request_uri'], '/'));
if (empty($controller)) {
$controller = 'IndexController';
}
if (empty($action)) {
$action = 'index';
}
(new $controller)->$action($request, $response);
});
$server->start();
});
HTTP 协程客户端
官方建议使用 Saber 。
Swoole 中使用 HTTP 异步服务器、HTTP 协程服务器的更多相关文章
- day37 异步回调和协程
异步回调 """ 异步任务使用场景 爬虫 1.从目标站点下载网页数据 本质就是HTML格式字符串 2.用re从字符串中提取出你需要的数据 ""&quo ...
- Python的异步编程[0] -> 协程[1] -> 使用协程建立自己的异步非阻塞模型
使用协程建立自己的异步非阻塞模型 接下来例子中,将使用纯粹的Python编码搭建一个异步模型,相当于自己构建的一个asyncio模块,这也许能对asyncio模块底层实现的理解有更大的帮助.主要参考为 ...
- Python异步IO之协程(一):从yield from到async的使用
引言:协程(coroutine)是Python中一直较为难理解的知识,但其在多任务协作中体现的效率又极为的突出.众所周知,Python中执行多任务还可以通过多进程或一个进程中的多线程来执行,但两者之中 ...
- 深入浅析python中的多进程、多线程、协程
深入浅析python中的多进程.多线程.协程 我们都知道计算机是由硬件和软件组成的.硬件中的CPU是计算机的核心,它承担计算机的所有任务. 操作系统是运行在硬件之上的软件,是计算机的管理者,它负责资源 ...
- 进程&线程(三):外部子进程subprocess、异步IO、协程、分布式进程
1.外部子进程subprocess python之subprocess模块详解--小白博客 - 夜风2019 - 博客园 python subprocess模块 - lincappu - 博客园 之前 ...
- Swoole 中使用 WebSocket 异步服务器、WebSocket 协程服务器
WebSocket 异步风格服务器 WebSocket\Server 继承自 Http\Server,所以 Http\Server 提供的所有 API 和配置项都可以使用. # ws_server.p ...
- Swoole 中使用 TCP 异步服务器、TCP 协程服务器、TCP 同步客户端、TCP 协程客户端
TCP 异步风格服务器 异步风格服务器通过监听事件的方式来编写程序.当对应的事件发生时底层会主动回调指定的函数. 由于默认开启协程化,在回调函数内部会自动创建协程,遇到 IO 会产生协程调度,异步风格 ...
- Swoole 中使用 UDP 异步服务器、UDP 同步客户端、UDP 协程客户端
UDP 异步风格服务器 # udp_server.php // 创建 UDP 服务器对象,监听0.0.0.0:9502端口,类型为SWOOLE_SOCK_UDP $serv = new Swoole\ ...
- Python 中的进程、线程、协程、同步、异步、回调
进程和线程究竟是什么东西?传统网络服务模型是如何工作的?协程和线程的关系和区别有哪些?IO过程在什么时间发生? 一.上下文切换技术 简述 在进一步之前,让我们先回顾一下各种上下文切换技术. 不过首先说 ...
随机推荐
- Java Timestamp 类的使用
很简单,我们可以这样声明 Timestamp ts=new Timestamp(new Date().getTime());这样我们就可以得到时间比较具体的一个类型转换!!! 在开发web应用中,针对 ...
- springMVC中@requestMapper的使用和注意事项
package com.hope.controller;import org.springframework.stereotype.Controller;import org.springframew ...
- Python用xlrd读取Excel数据到list中再用xlwt把数据写入到新的Excel中
一.先用xlrd读取Excel数据到list列表中(存入列表中的数据如下图所示) import xlrd as xd #导入需要的包 import xlwt data =xd.open_workboo ...
- 联盛德 HLK-W806 (九): 软件SPI和硬件SPI驱动ST7789V液晶LCD
目录 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明 联盛德 HLK-W ...
- MES目前应用很多,为什么APS计划排程系统应用很少?
一.APS自动化计划排程能带来哪些效益? 1.提高订单准时交货率,提高客户满意度 2.缩短生产制造周期,提高生产效率 3.多品种.小批量.以销定产,快速解决插单.急单预测交期问题 4.减少物料采购提前 ...
- CF1139A Even Substrings 题解
Content 有一个长度为 \(n\) 的数字串 \(s\),试求出代表偶数的子串个数. 数据范围:\(1\leqslant n\leqslant 65000\),\(s\) 仅包含数字 \(1\s ...
- 卸载zabbix
1.首先停止zabbix运行 可以用官方命令 systemctl stop zabbix-server zabbix-agent httpd rh-php72-php-fpm 也可以直接kill -9 ...
- XMLHttpRequest() 如何预检查CORS跨域请求的?
https://blog.csdn.net/qq_38261174/article/details/90691058
- Mysql中不能update自身的解决方法
不能执行:update bi_data.order_all_detailset err_msg='同时存在于wx,zfb平台',proc_time=now()where order_no in( se ...
- Signature Pad 使用
实现功能 能够在移动设备上实现电子签名,并保存为图片 git地址 https://github.com/szimek/signature_pad 参数说明 dotSize:点的大小(在屏幕上点击留下的 ...