推送服务器实现方式,求指导

白小衣 发布于 2014/03/06 09:10
阅读 380
收藏 0

【Gopher China万字分享】华为云的Go语言云原生实战经验!>>>

我不是问怎么推送过去,这个我用的jPush

想问下,服务器这边有新消息是通过另一个程序把消息写道一个表里的,然后这边推送服务器应该用什么方式去检测新消息呢?我就能想到一个是用while(true)循环去搜表看有没有新消息,但举得这样不太好啊,有什么好的方式?谢谢。

顺便问一下,ios的java推送服务器不用jPush这样的三方推送该怎么做,有示例么?

加载中
0
渠富林
渠富林
推送应该是事件驱动的,要触发推送,必然有相应的事件。
0
Brin想写程序
Brin想写程序
任何程序永远要有一个“死循环”,才能谈得上生命周期。如果没有死循环,这个程序就被操作系统给关闭了。提高效率的技巧就是在循环线程里面多sleep吧。
0
lotern
lotern

A是应用服务器,B是推送服务器

A要发送业务消息,通过内部接口将消息传递给B,

B将消息入库(数据库任务队列),同时消息进入B发送对列,然后B异步发送消息,发送后更新数据库消息状态(数据库任务队列移除)。

B同时有一个异步流程,定时从数据库读取长时间未处理的任务,进入B发送队列。

----

总体来说,还是循环,只不过大部分(99.9%)消息通过应用直接异步发送了,从数据库读取的只是少部分异常遗漏的消息。



lotern
lotern
回复 @白小衣 : 你是一个程序在应用系统和推送数据表之间进行数据同步,用表来做数据共享,如果不想在两个系统之间通信,就只能扫表了。你可以使用心跳扫表,平时1分钟扫一次,你的同步程序在把消息入表后,发事件消息给推送系统,推送系统立刻读表,然后加快心跳,读不到数据,放慢心跳。关键是,你要扫的表,要做成任务表,发送完成后,要移除数据,保证任务表是个小表。
魏涛
魏涛
回复 @白小衣 : 不相互通信就共用一套消息中间件。
白小衣
白小衣
这个思路不错,我这就是不太像让两个服务器互相通信
0
lotern
lotern

我们之前有个子系统是短信下行,最早的架构和你一样,一个程序从业务系统同步短信到短信系统的数据表,发送程序扫表发送短信。

短信表达到一定规模就有问题了,只能定时清表,很罗嗦。

现在是用异步事件,建立事件中心,业务系统同步事件到事件中心,子系统在事件中心订阅事件,子系统根据事件生成自己的事件处理结果。


所以你的业务系统不要直接产生推送结果,而是生成一个业务事件,子系统根据业务事件产生推送。

0
w
wahahachuang

 Goeasy也挺不错的,专业做web实时推送,服务器稳定,代码简洁易懂,还有中英文,网址是https://goeasy.io/

返回顶部
顶部