概述
推送采用websocket长连接,采用接口形式获取,客户端缓存5-10分钟。 断线重连最多三次,时间间隔为60s、120s、180s,是上次交互的时间 与检测时候的时间相差180s,就被被踢出。 客户端每180s发送一次心跳包检测连接是否可用,如果接收到服务器的推送消息,则从当前开始计算180s,减少无效的心跳检测。 如果心跳包在30s内无响应,则再发送一个心跳包,等待30s,无反应,判定连接失效。 客户端新连接成功,如果用户登录,需要发送登录ukey(web)或token(app)给服务器进行登录,未登录成功间隔30s重试一次,一经登录,除非断开或者调用退出登录,否则不会掉线。 连接支持ws和wss,建议使用wss安全连接。 登录使用ukey(web端) / token(App端) 去请求gzcp主站的验证接口。 请求数据除了body字段是可以为空的,服务端会做校验和检测,具体以wiki例子为主。 ws在线测试工具:http://www.easyswoole.com/wstool.html0.开发环境/代码
开发环境:
swoole version 4.4.23
php version 7.2.10
测试服 :host
外网:spush.test.gongzicp.com
内网:http://swoole-msg:18081
生产环境:host:
内网:swoole.push.com
外网:spush.gongzicp.com
安装swoole,git地址:https://github.com/swoole/swoole-src/tree/v4.4.x
git clone https://github.com/swoole/swoole-src.git
cd swoole-src &&
phpize &&
./configure
--enable-openssl
--enable-http2 &&
make && sudo make install
swoole-push分支
git clone git@59.110.162.133:/home/git/swoole-push.git
gzcp分支 swoole_push_0113
/gzcp/library/GoPush/Base.php
/gzcp/library/GoPush/Push.php
1. 初始化
1.1 安装需要的扩展
composer install
2.配置环境变量 ,路径/bootstrap.php
//环境变量开关 0本地,1测试 2线上 define('PUSHENV', 0);
3.设置允许最大链接数 MaxLinkNumber
, 路径:swoole-push/App/SystemConf.php,修改之后执行热重启。
备注:swoole 现在不支持主进程热重启
4.配置文件路径
/swoole-push/App/Conf/Test/ 测试服配置目录:
测试服mysql:/swoole-push/App/Conf/Test/db.php
测试服redis:/swoole-push/App/Conf/Test/redis.php
/swoole-push/App/Conf/Test/ 正式服配置目录:
正式服mysql:/swoole-push/App/Conf/Online/db.php
正式服redis:/swoole-push/App/Conf/Online/redis.php
2.swoole服务的系统命令
1启动/停止 服务
//-d 守护进程的方式启动服务 php easyswoole server start -mode=websocket -d //停止服务 php easyswoole server stop -mode=websocket //强制停止服务 php easyswoole server stop -force -mode=websocket //热重启 php easyswoole server reload -mode=websocket
2.进程管理:
//显示所有进程,以Mb方式显示 php easyswoole process show -d -mode=websocket //杀死指定进程 php easyswoole process kill --pid=PID -mode=websocket //杀死指定进程组(GROUP) php easyswoole process kill --group=GROUP_NAME -mode=websocket //杀死所有进程 php easyswoole process killAll -mode=websocket //强制杀死进程,需要带上 -f 参数 php easyswoole process kill --pid=PID -f -mode=websocket
3.Crontab 命令
可执行 php easyswoole crontab -h
来查看具体操作。
//查看所有注册的Crontab
php easyswoole crontab show -mode=websocket
//停止指定的Crontab
php easyswoole crontab stop --name=TASK_NAME -mode=websocket
//恢复指定的Crontab
php easyswoole crontab resume --name=TASK_NAME -mode=websocket
//立即跑一次指定的Crontab
php easyswoole crontab run --name=TASK_NAME -mode=websocket
4.Task管理
//查看 Task 进程状态
php easyswoole task status -mode=websocket
2.Nginx 配置ws
upstream swoole-push {
# 将负载均衡模式设置为IP hash
ip_hash;
server 127.0.0.1:9501;
}
server {
listen 80;
server_name swoole.push.com;
location / {
# websocket的header
proxy_http_version 1.1;
# 升级http1.1到websocket协议
proxy_set_header Upgrade websocket;
proxy_set_header Connection "Upgrade";
# 将客户端host及ip信息转发到对应节点
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
# 客户端与服务端300s之内无交互,将自动断开连接。
proxy_read_timeout 300s ;
# 代理访问真实服务器
proxy_pass http://swoole-push;
}
}
3. Gzcp的通信
Swoole-push和Gzcp有两处通信:
1.Token 验证接口, open.gzcp.com
是对内接口
# 正式服Url
http://open.gzcp.com/push/user/getappuid
# 测试服Url
http://open.gzcp.com/login/pushMsgLogin
测试服参考数据:
字段名 | 说明 | 参考值 |
---|---|---|
timestamp | unix时间戳 | 1612322032 |
loginkey | 客户端传递的Token | c1d0ab0add36c27e94efea2c65009691e3659705 |
token | 服务端自定义Token | 98306025f1f216cdce7bcdb488c94753 |
?timestamp=1612322032
&loginkey=c1d0ab0add36c27e94efea2c65009691e3659705
&token=98306025f1f216cdce7bcdb488c94753
返回结果 ,没找到是0 :
{"code":200,"data":{"uid":176906}}
2.接收Gzcp的Push
文件路径:swoole-push/App/HttpController/Api/
接口Url:
#评论通知:/swoole-push/App/HttpController/Api/Comment.php
/api/comment/message
#系统消息通知 /swoole-push/App/HttpController/Api/Notice.php
/api/notice/systemMessage
#个人消息通知 /swoole-push/App/HttpController/Api/Notice.php
/api/notice/userMessage
3.Crontab
PushUserNoticeMsg */6 * * * * 个人通知,6分钟执行一次
PushSystemNoticeMsg * 0-23/3 * * * 全局通知,3小时执行一次
PushCommentMsg */6 * * * * 评论通知,6分钟执行一次
版权声明:
1、该文章(资料)来源于互联网公开信息,我方只是对该内容做点评,所分享的下载地址为原作者公开地址。2、网站不提供资料下载,如需下载请到原作者页面进行下载。
3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考学习用!
4、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。