Swoole模式
1. swoole的安装
swoole面向生产环境的PHP异步网络通信引擎,官方网址是:http://www.swoole.com
安装扩展:
Linux环境
#!/bin/bash
pecl install swoole
Mac环境
#!/bin/bash
brew install swoole
2. steeze在swoole模式下运行
Steeze完美支持swoole的HttpServer应用,性能是传统php-fpm的数十倍,
点击查看更多关于swoole下HttpServer的介绍。
在框架的根目录下执行如下命令启动swoole服务器:
php app/console/swoole.php &
然后在浏览器中访问:
http://127.0.0.1:9501/
此时steeze框架下的应用运行在swoole模式下。
app/console/swoole.php文件是一个用php写的服务端程序,代码如下:
<?php
include dirname(__FILE__).'/../../kernel/base.php';
!class_exists('swoole_http_server',false) &&
exit("Swoole server extension is not install,see: https://www.swoole.com/\n");
$http = new swoole_http_server("0.0.0.0", 9501);
$http->on('request', function ($request, $response) {
$filename=ROOT_PATH.ltrim($request->server['request_uri']);
if(is_file($filename)){
$contentType=C('mimetype.'.fileext($filename),'application/octet-stream');
$response->header('Accept-Ranges','bytes');
$response->header('Content-Type',$contentType); // 网页字符编码
$response->sendfile($filename);
}else{
Loader::app($request, $response);
}
});
$http->start();
steeze与swoole整合的核心代码是:
Loader::app($request, $response);
将swoole的Request和Response对象传入steeze应用,从而实现让steeze来处理请求并将结果输出到用户浏览器。
在实际的项目部署中,可以将app/console/swoole.php代码中默认的9501端口修改后运行多个服务,然后配合nginx实现多服务器负载均衡。
3. nginx+swoole配置
swoole可以和nginx配合使用,让nginx来处理静态的资源文件。
配置nginx.conf如下:
server {
root /data/wwwroot/;
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;
}
}
}
4. swoole模式运行下的应用开发注意事项
swoole模式本质上是在命令行下运行代码,但跟一般的命令行下的程序不一样,swoole模式是替代php-fpm的企业级解决方案。
应用的开发方式跟php-fpm下运行的程序基本一样,但一些细节需要注意:
1). 在代码中不能使用exit()函数,因为使用此函数会导致服务器程序整体退出。
2). 在代码中向浏览器输出字符串使用Library\Response类提供的write方法(或者在控制器中直接返回字符串),如果使用echo或其它输出函数,会输出到终端日志文件中,而不是输出到用户浏览器端。
3). 使用make函数在容器中构建的对象会一直内存中存在,因此容器功能实现了真正的单例模式,如果需要下次请求使用新对象用new关键字创建。
- 上一条
- 下一条