Andorid手机应用程序去请求一个服务器有很多种方法,HTTP,Socket,WebService等,每次请求都能返回数据,程序可以根据返回的值进行保存或者再次发起请求,想得到什么就请求什么,非常精准,也非常迅速。
可是像QQ,飞信,米聊,微信这些软件是怎么实现IM通信的呢?从网上找了一堆,大多数都不大明白怎么回事,现在我终于明白为什么招聘Android开发工程师的时候,要求有网络开发(TCP/IP、HTTP)了。
先列一下我查到的方法或者我知道的方法,也可能有重复的,求高手指正:
1、SMS短信PUSH
依靠运营商的短信接口,push命令短信到手机端。接收到短信后拦截,然后解析短信内容,根据解析到的指令,产生相应的动作,比如再去主动请求服务器,拉取数据。
优点:实时性强,不会耗电,不会耗费网络流量,只要有信号,就能用。可以说是几乎万能的了。
缺点:必须依靠比较大的运营商,而且如果很多人同时在线交流,SMS数量会非常之大。免费的短信接口不容易寻找到,支持性,兼容性较差。
2、简单轮询的方式
我的猜测:每隔一段时间主动向服务器发起请求,可以是HTTP请求。通信过程需要自己去写,最需要考虑的就是请求的频率,太慢了达不到即时的效果,太快了电池,流量和带宽都有限制。
优点:不需要依靠第三方,轻量级实现,灵活性好
缺点:频率需要权衡,功能需要自己封装。
3、Socket连接
优点:可以保持长连接,快速响应
缺点:手机端电力和流量消耗较大,服务器端连接数过多,负载过重
4、MQTT协议
这个没研究过,不过据说这个也能很好实现,服务器端如果是用PHP写的话,看起来就比较吃力了。
5、 C2DM方式
谷歌官方提供的服务
优点:官方式的服务,全面,有效
缺点:不支持2.2以下版本,不能自己建立服务器,服务器在国外,你懂得
6、XMPP协议
6.1 Openfire + asmack
6.2 androidPN Server + androidPN Client
第二个其实是第一个的第三方实现,但是如果自己做,还是推荐用第一种方式
未完待续。。。