即时通讯也就是 IM,QQ,微信等的总称。即时通讯协议有XMPP,MQTT等。XMPP协议在 IM 上生态较为完善,服务端较出名的有ejabberd,Openfire 等,MQTT 则着重于物联网方面。
由于XMPP的即时通讯系统已然太多,再造一个破轮子也没有意义。这次我们造一个 MQTT 的破 轮子,一方面是为了学习MQTT,另外一方面现在 kotlin 语言很流行,都被 google 钦定为安卓开发备选语言,我们也来淌一下这滩浑水,学一下 kotlin。
下面这是一张 按自己理解画的IM 导图,由于工作都是推送系统,所以有些偏向于推送。反正都是消息系统,先这样看吧。
从上面看来功能还是很复杂的,既然我们只是做一个原型(PS:之前看过看到一篇文章说了prototype和demo 的区别,prototype是为了快速验证功能,demo 则是为了展示使用,比prototype更高一个层次),那就大概实现核心功能就可以。IM 最最核心是可以文字聊天,那我们就只实现这个功能,其他的就当是以后第100版本需要实现的功能。
最最核心流程图:
在技术选型上,就是用非常流行的netty和spring boot,存储方面先用redis顶着。
框架如下:
效果图:
总结:这是一个非常简陋的IM实现,目的是学习kotlin和mqtt,代码方面也没有做任何优化。git地址:https://coding.net/u/uleaf/p/uim/git
最后的坑:
1.jdk9和gradle在IDEA上无法使用。
2.mqtt的packetId只能是1到65535,有时又叫messageId(疑惑)。
3.目前只简单实现了单聊以及离线消息,群聊没有实现。