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

最新文章

  1. linux内核追踪——find_next_bit函数详详详解
  2. mysql where 1=1和 1=0 的作用
  3. Apache按日切分日志
  4. GBDT基本理论及利用GBDT组合特征的具体方法(收集的资料)
  5. 【转】 SQL 2005 try catch
  6. [drp 4] 使用dom4j,读取XML数据,保存至数据库
  7. DPDK内存管理-----(三)rte_malloc内存管理
  8. 【JavsScript】一个元素绑定多个事件
  9. 在 windows 上面安装 tensorflow
  10. 编写自己的javascript功能库之Ajax(仿jquery方式)
  11. mysql 结合keepalived测试
  12. MyEclipse每次修改js有另一种部署
  13. python numpy基础 数组和矢量计算
  14. 刨根究底字符编码之四——EASCII及ISO 8859字符编码方案
  15. Windows Server 2012 R2 官方原版镜像
  16. 如何回滚请求&lt;复制系统初始的数据&gt;所处理的数据
  17. VB6进行GZIP解压&amp;C#进行GZIP压缩和解压
  18. python小游戏
  19. Screen Space Depth Varying Glow based on Heat Diffusion
  20. Laravel 自定义分页、可以调整、显示数目

热门文章

  1. 【Service】【Database】【Cache】Redis
  2. react中在hooks方法useEffect中加载异步数据
  3. Synchronized深度解析
  4. 如何将java对象转换成json数据
  5. 使用Modbus批量读取寄存器地址
  6. Mybatis-plus报Invalid bound statement (not found)错误
  7. Jsp/Servlet文件的上传和下载
  8. gitlab 备份&amp;恢复
  9. centos部署golang环境
  10. 判断是否为空….IsEmpty(Power Query 之 M 语言)