关于新版升级说明
升级swoole版本到4.5.11,提升websocket性能
支持websocket服务多节点扩容,实现负载均衡
一、使用前注意事项
即时通讯采用的技术方案是websocket,需要在php安装Swoole扩展
需要在服务器中手动启动websocket的服务端,并且设置进程守护
在nginx中设置服务的反向代理以供客户端连接访问
下方文档会详细说明配置方法,请仔细按照文档步骤操作
二、给php安装Swoole扩展
a. 确认当前安装状态及版本
/www/server/php/71/bin/php -r 'echo swoole_version(), PHP_EOL;'已安装能正常打印版本号

未安装执行命令报错(找不到函数)

b. 卸载老版本(2.x),如果上方报错未安装跳过此步骤
进入宝塔,选择软件商店菜单
搜索「php7.1」
选择「已安装」
找到php7.1,点击右侧的「设置」

点击「安装扩展」
找到「Swoole」点击右侧卸载

c. 安装新版本
下载源码包
wget https://pecl.php.net/get/swoole-4.5.11.tgz
执行安装
/www/server/php/71/bin/pecl -v install swoole-4.5.11.tgz
上方提示一直回车取默认值即可
如果遇到下方报错请临时删除禁用函数
putenv与popen
安装成功

在php.ini中添加扩展
extension=swoole.so
重启php服务

验证swoole版本
/www/server/php/71/bin/php -r 'echo swoole_version(), PHP_EOL;'
三、启动websocket服务并设置反向代理
1. 提前准备内容
a. 站点目录,例如:/www/wwwroot/demo.rrsc.cn
b. php运行路径,例如:/www/server/php/71/bin/php
下方操作要替换为自己服务器的路径
1. 测试手动启动
cd /www/wwwroot/demo.rrsc.cn # 进入站点目录(改为自己站点目录)
/www/server/php/71/bin/php console websocket/server # 启动服务(改为自己php运行路径、注意命令中间的空格)
看到下面提示为正常启动,测试成功后Ctrl+C停止掉。
如果未显示启动成功请根据提示进行排查,比如提示:请检查swoole扩展是否安装、请检查是否安装直播插件、请检查PHP版本是否大于7.1、MySQL连接失败、Redis连接失败等情况

2. 配置systemd使用进程守护启动
a. 使用下方命令创建文件或者直接使用宝塔的文件管理进行操作
vim /etc/systemd/system/renren-websocket.service # 创建配置文件
b. 现将下方内容中自己的站点目录、php运行路径进行替换后复制到刚才新建的文件中
[Unit]
Description=Renrenshop WebSocket Server
After=network.target
[Service]
Type=simple
User=root
Group=root
WorkingDirectory=/www/wwwroot/demo.rrsc.cn/ ## 修改为商城站点实际路径
ExecStart=/www/server/php/71/bin/php console websocket/server ## 修改为实际PHP路径
Restart=always
RestartSec=3
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=websocket-server[Install]
WantedBy=multi-user.target
c. 执行systemd的加载与启动
systemctl daemon-reload # 加载配置
systemctl start renren-websocket # 启动服务

d. 查看启动状态
systemctl status renren-websocket

e. 设置开启自启动【非常重要】
systemctl enable renren-websocket
四、配置nginx的反向代理
宝塔中选择站点
搜索站点
点击对应站点右侧的「设置」

1.选择配置文件,空行复制填写红框内容
点击保存

# WebSocket反代
location /ws {
# 后端服务地址
proxy_pass http://localhost:10623;
# 关键设置 - 启用WebSocket代理
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
# 其他有用设置
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# 防止WebSocket连接超时
proxy_read_timeout 86400; # 可根据需要调整超时时间
proxy_send_timeout 86400;
}
2. 访问测试
访问 域名/ws 显示下方内容为配置成功

五、管理端websocket服务检测工具
管理端提供了图形化的检测工具,首次配置时需要登录服务器或宝塔操作,后面查看服务启动状态或者简单操作都可以在此页面进行
此工具可以查看直播插件安装状态、websocket服务启动状态、Swoole安装状态及版本
此工具可以进行服务重载与服务重启,注意:服务重启仅是向服务发送shutdown信号,仍需依赖systemd进行拉起

重载服务:是指柔性终止/重启的机制,重载时不会断开连接,适用于小版本更新后重启服务生效新功能
重启服务:是指强制杀死服务进程后重新启动,会断开所有连接,适用于大版本更新以及服务状态异常情况使用 (重启仅发送shutdown信号,仍需依赖systemd进行拉起)
注意:如果WebSocket服务器未启动或异常,请手动登录服务器进行启动处理
六、关于系统升级后的websocket重启说明
如果系统升级后需要重启websocket,会在升级日志中标明
小版本更新可以使用管理端的「服务重载」、「服务重启」
大版本更新可以使用管理端的「服务重启」
遇到「服务重载」或「服务重启」仍然不生效的情况,请使用 systemctl restart renren-websocket 进行重启或者使用 systemctl status renren-websocket 查看具体原因


