先简单记录下让 swoole 能跑起来的思路,本次应用不多,避免以后再用时忘记。
针对于 laravel 的 swoole 项目 github 上主要有两个还算活跃:laravel-S 和 laravel-swoole,本来看 laravel-S 有中文文档且篇幅不小,先探索它,无奈太小白了,一路坎坷太多最终头大暂时放下了,于是转 laravel-swoole。
首先要说明的是 swoole 目前仅支持 mac 和 Linux,所以这里在 windows 上借助 docker 来探索的。
对 swoole 定位的通俗理解(借用师傅的回答):与其说是「加速器」,更可以说是一个「中转站」或者「代理」。因为 swoole 拉起来的 http 服务使用的是 1215 端口,为了让用户可以直接通过 80 端口访问,所以才使用了 nginx 的中转(代理)功能。nginx 中的 proxy_pass 就是为了实现代理功能的关键命令。(本次只借助 swoole 提高运行效率)
1.安装
首先安装 Swoole 扩展,要进入 docker 的 php 容器执行
pecl install swoole
然后修改 php.ini 增加 一行:
extension=swoole.so
使用 composer 给 laravel 安装此扩展
composer require swooletw/laravel-swoole
发布配置,请运行以下命令以生成配置文件swoole_http.php
并swoole_websocket.php
在目录中/config
:
php artisan vendor:publish --tag=laravel-swoole
在 swoole_http.php 中,开发环境可修改 server.host 为 0.0.0.0,方便外部访问 docker 内部地址。
其默认监听端口是 1215,保持默认,所以需要在此 docker 容器的配置文件中添加一个端口映射,类似这样:
重启 docker 容器后 docker exec phpcontainer bash 进入容器内部执行 swoole 服务器的启动命令:
php artisan swoole:http start
这个时候就应该可以在外部通过 9001 端口访问网站了,达到用 swoole 加速的目的。
下面继续用 nginx 代理配置 swoole 服务器,将以下文档中提供的配置信息添加入 nginx 配置文件:
map $ http_upgrade $ connection_upgrade {
默认升级;
'' 关闭;
}
服务器 {
listen 80 ;
server_name your.domain.com;
root / path / to / laravel / public;
index index.php;
location = /index.php {
#确保
“public”目录中
没有名为“not_exists” #的文件。try_files / not_exists @swoole;
}
location / {
try_files $ uri $ uri / @swoole;
}
location @swoole {
set $ suffix “” ;
如果($ URI =的index.php){
组 $后缀 “/” ;
}
proxy_set_header主机$ http_host ;
proxy_set_header Scheme $ scheme ;
proxy_set_header SERVER_PORT $ server_port ;
proxy_set_header REMOTE_ADDR $ remote_addr ;
proxy_set_header X-Forwarded-For $ proxy_add_x_forwarded_for ;
proxy_set_header升级$ http_upgrade ;
proxy_set_header连接$ connection_upgrade ;
#IF https #proxy_set_header HTTPS“on”;
#下面地址应填要让 nginx 中转去的 swoole 服务器的地址,比如 192.168.0.0:9001
proxy_pass http://127.0.0.1:1215 $ suffix ;
}
}
重启 nginx 后应该可以在外部通过 your.domain.com:80(原 nginx 的外部映射端口)访问经过 swoole 处理的项目了。
暂时先到这,待更多探索后继续补充。