首页
下载
文档
社区
视频
捐赠
源代码
赞助商
AOT 编译器
AI 助理
商业产品
PHP AOT 原生编译器
Swoole-Compiler 代码加密器
CRMEB 新零售社交电商系统
登录
注册
全部
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
发表新帖
如何判断消息是否推送成功
### 问题描述 手机a开启网络,手机b开启网络,a给b发消息,正常接收;手机b断网,不退出程序,a给b发,无法准确判断b的消息状态,还是会认为推送成功,b其实已经掉线。直接杀死app、关闭app,这时候才能准确判断。 ### Swoole版本,PHP版本,以及操作系统版本信息 swoole最新版,php7.4,centos7 ### 相关代码 ```php $server = ServerManager::getInstance()->getSwooleServer(); $info = $server->getClientInfo($toUserInfo['fd']); if($info && $info['websocket_status'] == WEBSOCKET_STATUS_FRAME) { //本机推送 if($server->isEstablished($toUserInfo['fd'])&&$server->push($toUserInfo['fd'], $encodeMsg)){ if($messageId==0){ return true; } return true; }else{ //推送失败,更新用户在线信息,走离线消息 return false; } } ``` ### 你期待的结果是什么?实际看到的错误信息又是什么? 准确判断推送是否成功,保证消息准确,是每个人想要的,我想知道如何才能确保消息成功推送,谢谢
发布于5年前 · 5 次浏览 · 来自
提问
易清风同学
### 问题描述 手机a开启网络,手机b开启网络,a给b发消息,正常接收;手机b断网,不退出程序,a给b发,无法准确判断b的消息状态,还是会认为推送成功,b其实已经掉线。直接杀死app、关闭app,这时候才能准确判断。 ### Swoole版本,PHP版本,以及操作系统版本信息 swoole最新版,php7.4,centos7 ### 相关代码 ```php $server = ServerManager::getInstance()->getSwooleServer(); $info = $server->getClientInfo($toUserInfo['fd']); if($info && $info['websocket_status'] == WEBSOCKET_STATUS_FRAME) { //本机推送 if($server->isEstablished($toUserInfo['fd'])&&$server->push($toUserInfo['fd'], $encodeMsg)){ if($messageId==0){ return true; } return true; }else{ //推送失败,更新用户在线信息,走离线消息 return false; } } ``` ### 你期待的结果是什么?实际看到的错误信息又是什么? 准确判断推送是否成功,保证消息准确,是每个人想要的,我想知道如何才能确保消息成功推送,谢谢
赞
0
收藏
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
登录
后参与评论
评论
2020-11-09
鲁飞
`手机b断网,不退出程序`这种情况用心跳处理 成功推送的话你可以要求客户端再给你一个ack,也是类似心跳的ping和pong
赞
0
回复
2020-11-09
易清风同学
回复
鲁飞
公司领导不许这么用啊,头疼
赞
0
回复
2020-11-10
易清风同学
$server->getLastError()也是等于0
赞
0
回复
2020-11-20
易清风同学
最后在应用层做了个应答,确认消息收到、送达,有更好的方案可以在这边留言,帮助到其他人
赞
0
回复