php后台推送消息,有时候消息会推送不成功

ppppp

然后呢我为了,测试循环的1000消息推送,如果发送的消息量大一些。循环到某一段的时候就会找不到uid,如果发送的消息简单,比如就发送哥 1或者2  1000条消息可以全部顺利发送成,
 

[attach]1328[/attach]
如果发送失败,也应该return data ===false啊  为什么会返回201 找不到这个uid呢

4251 5 0
5个回答

phpcreeper

1、201这个返回码,这不是你图示的示例代码定义的吗? 不一定非返回201啊
2、测试用了什么协议以及发送了多大的数据?根据你目前的上下文,只能推测可能的原因是:
发送数据过大,超过了连接能够接收的最大包长,默认为10MB,导致连接被关闭,即uid离线;
当然也不排除你客户端自身的原因造成的中途离线。

  • ppppp 2018-11-01

    一般消息推送失败是什么原因,有时候心跳正常,但是消息推送会失败,推送不过去,我服务器的原因吗

  • ppppp 2018-11-01

    每次早上起来去测试的时候会出现这样的问题,然后我要是重启下服务器可能就好了

ppppp

我是循环请求推送消息的接口,  单条消息可能没多少, 全部加起来可能超过10mb  是连接超时造成的吗

  • ppppp 2018-11-01

    @614:但是比如我早上刚来。刚打开项目测试下数据,会经常推送不出去, 然后我重启下服务器就好了。这是什么原因

phpcreeper

总结下,仅供参考:
1、题示总体现象表现为客户端中途或提早离线。
2、你这段代码看上去很熟,很像一段 “异步推送” 代码片段,你推送的测试是直接在服务端调用推送接口,还是从独立客户端先转推到服务端而后再推给对向客户端?
如果是直接在服务端调用推送接口【比如赤裸的调用sendMessageByUid()】,那我第一次的说法就不对了,因为那个是wm底层接收端的判断逻辑。另外即便是独立的客户端转推,也不会影响到你对向的连接客户端。
3、假如你是在服务端直接推送,对你提及的循环请求推送接口发送大数据这种情况,若由于网络原因客户端未来得及接收数据,则会导致数据积压在应用层的发送缓冲区,最终导致丢包,但这并不会导致与客户端的连接断开,即不会离线。
4、根据你描述的早上这情况,我说不好,你自己观察下框架日志以及记录下业务日志,甚至源码调试下都不难的。
5、推送消息失败的可能原因一般是:
(1) 客户端主动断开
(2) 没有设置必要的心跳,防火墙干掉不活跃的连接
(3) 客户端发送的数据包非法,服务端主动关闭连接
(4) 应用层发送缓冲区爆满
(5) 网络原因
(6) 其他原因

  • ppppp 2018-11-01

    明明消息推送成功,却会走到返回201那步。 我连接的客户端已经成功收到消息了

ppppp

[attach]1329[/attach]
明明消息推送成功,  他却走到返回201这一步,怎么这么奇葩

ppppp

。。

年代过于久远,无法发表回答
×
🔝