要做实时数据显示功能,当然这里主要指手机客户端,在客户端后台挂起,实时监听,如果有内容则判断是否要显示通知栏。那么是选择长轮询,还是用 websocket ?然后服务端增加 websocket 服务端处理。
在这个帖子里: https://www.v2ex.com/t/477876?r=julyclyde 。有 V 友指出“长连的资源消耗不比轮询低”,“受网络限制比较大,需要处理好重连”
那么到底要怎样考虑做选择?
1
unco020511 2020-08-25 14:59:04 +08:00
使用第三方推送 SDK
|
2
xuanbg 2020-08-25 15:07:59 +08:00
手机你不走系统通知?
|
3
chinvo 2020-08-25 15:08:54 +08:00
手机你还想保活当流氓咋地?
当然是老老实实系统推送 /FCM 啊 |
4
Hanggi 2020-08-25 15:11:24 +08:00
Firebase 国内收得到吗?跟其他国内厂商比哪个好?
有谁用过 mobpush 吗?跟极光比哪个好? |
7
coderxy 2020-08-25 16:03:57 +08:00
第三方推送吧,不然 app 不在进程中时你收不到的。
|
8
tctc4869 OP |
9
unco020511 2020-08-25 16:17:35 +08:00
@tctc4869 目前的最优选择就是第三方,你如果要自己开发,想想准备投入多少人力
|
10
BlackGrasshopper 2020-08-25 16:18:15 +08:00
统一推送联盟
|
11
tctc4869 OP @unco020511 我目前的系统通知是在 app 没有被安卓系统杀死的情况下进行消息通知
|
12
coderxy 2020-08-25 16:29:11 +08:00
@tctc4869 可以接第三方的,比如极光推送啥的。 因为你自己搞会有很多问题,比如像小米啥的它在后台限制了后台长连接,你要想在 app 不启动的情况下推送消息下去,比如走小米的推送渠道。 还有好几家都是这样。 所以最好的方案就是走极光一类的第三方推送。
|
14
tctc4869 OP @coderxy 在 app 不被系统杀死的情况下,可以用轮询 http 或 websocket 直接与自家后台服务联通做 app 消息通知把
|
15
stevenkang 2020-08-25 16:47:27 +08:00
凡是手机上 app 想自启动做推送,不用统一推送的,见一个杀一个。
|
16
learningman 2020-08-25 16:49:26 +08:00
@chinvo 前提是用户有 GMS
摸摸良心,国内有多少用户装了 GMS 。。。真要推送还得当流氓 |
17
chinvo 2020-08-25 16:50:06 +08:00
@learningman #16 7.0 及之后除了华为都自带 GMS 的
|
18
IGJacklove 2020-08-25 18:46:51 +08:00
@tctc4869 看你愿不愿意花钱了,肯花钱别人都帮你做好了.
|
19
learningman 2020-08-25 22:45:14 +08:00
@chinvo MIUI 和 ColorOS 这种的应该都没有吧,原生安卓才多少人啊
|
20
tctc4869 OP @IGJacklove 你的意思是安卓系统通知不用第三方系统通知服务都会出问题用不了。必须要花钱?
|
21
IGJacklove 2020-08-26 07:33:43 +08:00 via Android
@tctc4869 没有这个意思,我的意思是想少点麻烦就多花点钱,想自己弄就麻烦一点,自己做取舍。
|
22
opengps 2020-08-26 08:09:20 +08:00
app 没有被杀死的情况下,用原生 socket 更实时
|
24
opengps 2020-08-26 08:53:02 +08:00
@tctc4869 http 轮训比较简单。建议首选,做大了在考虑 websocket
websocket 实时性好,但是大部分人没经历过长连接项目,可能得有些坑需要踩。作为一个客户端,可控性更低,有问题难以分析 |
25
unco020511 2020-08-26 09:04:56 +08:00
@tctc4869 不管是从消息送达率,还是耗电,还是投入 /产出比 上来说,使用第三方推送都会比你自己做要好,你要考虑好;你使用 http 轮询不用考虑耗电问题吗,再说现在的 rom 很多会限制你后台的活动,再其次你使用 socket 长连接,你的心跳包间隔是多少,怎么根据不同运营商来优化心跳频率,还有国内 row 有诸多改动和限制,也会涉及适配的问题;以上你都得考虑
|
26
sioncheng 2020-08-26 09:47:36 +08:00
手机后台存活不了多少时间,不要想啦。 退而求其次,有数据需要刷新了,发送 APP 推送( ios apns 或者国内 android 厂商推送服务),提醒用户打开 APP 然后拉取最新数据。
|
27
0x8192dd 2020-08-26 14:41:07 +08:00
移动端直接利用推送通道不就完事了?接个推送 SDK 就行了,保活就别想了
都 2020 年了,移动端没有后台挂起这种说法,用户退出应用之后,就是靠推送通道推送消息,用户点了消息,唤起应用,重连,你用 iOS,微信启动之后有个“收取中”,就是执行重连和数据同步。 轮询和 socket 的区别主要是在应用位于前台的时候 如果你是要做 IM,或者股票 K 线图那样实时的东西,那必须用 socket 让客户端接收服务器主动下发的数据,如果只是个什么中奖通知,工单反馈之类实时性要求不高的推送,那么在移动端轮询或者写一些触发点(比如切页面)来查询就可以了。 简而言之:需要频繁主动下发 - socket ;需要用户在某一页面的时候更新数据状态 - 轮询 |