关于消息推送的猜想


一直一来都在使用淘宝的消息推送业务,感觉很好用,前一段时间QQ2012也实现了消息推送的业务,另外一些安卓软件也实现了消息推送,我感觉消息推送这种技术或架构以后会在很长时间内流行。

引用淘宝开放平台对于消息推送的解释:

主动通知(Stream api)是数据推送api,即数据主动推送服务,把淘宝产生的数据实时的推送给外部,app通过订阅可接受这些实时消息。

消息推送业务说的简单点:

服务端-----》》》启动。

客户端-----》》》启动。

客户端-----》》》连接服务端,并建立TCP长连接。

服务端-----》》》得到信息源(来源可能是别的系统的消息通知或自己在循环扫描)。

服务端-----》》》把这条信息放入一个队列中,这个队列一般用内存实现。

服务端-----》》》把这条信息推送到客户端。

客户端-----》》》接收到这条消息,并异步做处理。

 

这个只是一个大概的构架,其中会有很多问题。

1、如何保证服务端正常运行?

答:在服务端开一个监控服务,用来监控这个服务端正常运行,如果服务端异常,强制重启,并通知管理员。

2、如何保证客户端与服务端的连接不中断?

答:服务端每25秒给客户端发送一个特定消息包(淘宝称为“心跳”),如果客户端收到这个心跳,就说明连接是正常的,如果收不到这个包就说明连接已经中断,这个时候客户端应该放一个监控程序,强制重启客户端,并再次与服务端进行连接。

3、如何保证服务端与客户端之间通信所传送的数据的完整性?

答:两端之间用json格式进行传输,然后在对方得到数据后进行反序列化解析,如果格式不正确则丢弃。

4、数据传输过程中如果数据丢失了怎么办?

答:服务端增加一个功能,每15分钟检查一次,如果用户没有获取信息,那就说明客户端掉了,在下次连接后,那这个时间段发给客户端。

 

淘宝是用java开发的,腾讯是用C++开发的,安卓也是用java开发的。我想用C#去开发一个自己实用的消息推送系统,并在开发完成后应用在公司的项目上面。

主要用到的技术:

1、多线程(可以确定)

2、Socket(可以确定)

3、Task(正在考虑中)

Socket中需要使用的协议:TCP

经过与一个大牛的交谈,觉得上面的实现可能存在两个问题:

1、心跳时间不能定下来,要根据具体的网络环境来定。需要反复测试,换个网络环境也有可能需要有改动。

2、协议有两种可选的,TCP和HTTP,我暂定TCP,如果后期发现TCP协议有问题的话,我考虑使用HTTP协议。

另外,多线程需要使用线程池技术。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM