米聊,微信,微聊,QQ, 个信,口信,QQ通讯录,天天聊等等,移动时代的即时通讯如雨后春笋般涌现出来。 QQ在移动互联网时代不再是无法挑战的霸权地位。各个IT大佬都在觊觎即时通讯市场。因为这个是能够打造新帝国的产品。
由于工作原因,我有机会全面负责这类产品的开发。
开始接收这类产品的时候,我们避开了QQ这样的利剑,选择了通讯增强类应用,如个信,口信,QQ通讯录,天天聊等和短信或电话模块增强的产品。
开始开发的时候,我参考了openfire 开源项目。openfire有一套完整的客户端和服务端解决方案。服务端采用java,基于效率的考虑,我们放弃了这套方案。 客户端smark采用java对我们有一定的参考意义。 经过一段时间的讨论,我们定下数据格式协议,采用google的protocal buffer, 用TCP/IP进行通讯。 采用socket 通讯,应该是行业标准,google 的pb 相对xml 或是json,可以省不少流量,并且可以极大地提高开发效率。
先说下客户端开发. 客户端基本是将openfire 中smark通讯那套拿过来, 读数据一个线程,写数据一个线程, 心跳一个线程(用于保持长连接). 接下就是面向接口的程序设计, 抽象出两个接口: packet, filter. 所有的业务包都要继承packet, 通过filter 获取想要的响应包。 Android 开发的时候,需要在androidmanifest.xml 注册网络连接侦听器, 侦听网络连接(断开与启动), 网络连接对象采用单态的设计模式。
客户端另外一个难点是对短信模块的改造,大体就是将android的短信模块移植过来,然后在合适地方添加网络信息的代码。
服务端要关注信息转发处理。建议采用c/c++语言开发,效率要高些。