因爲項目的需要,需要在產品中內嵌即時通訊和消息提醒這個功能。前期的調研過程中看了蠻多的產品,看過環信和openfire,甚至包括androidpn。因爲是android出身,所以對即時通訊這個模塊尤爲感興趣。
openfire這個東西是一個很不錯的東西,起碼可以讓你在前期就能很快的擁有即時通訊模塊。詳細看了下文檔,發現openfire用的協議是古老的xmpp協議。在這個json橫行的時代,xmpp顯得其太古老了,而且最大的問題是傳輸的數據量太大。openfire的核心是mina。據我說知,mina和netty都是由一個作者。作者也是看到了mina存在的缺陷,使得其重新開發了一個netty。複雜的通訊過程使得性能大大降低,在後期的插件維護上也是大費心思,所以我打算自己捨棄openfire這個東西。自己去定義一套完全屬於自己的即時通訊系統。
協議的選擇是很重要的,這個東西關係到整個系統的複雜度,和通訊過程中的性能問題。再此特意去研究了下騰訊的協議。騰訊的協議是基於ActiveSync的修改版,取名叫同步協議Sync流程如下:
1、發送消息方告訴服務器有新消息
2、服務器方接收發送消息方數據
3、服務器告訴消息接收方有新數據要接收
4、接收方取得服務器端數據
5、接收方告訴服務器數據已經拿到,消息可以作廢
複雜的協議,我是這樣通俗的去認爲的,騰訊微信大體就是這樣的一個協議,其中加入了token令牌去確保數據的安全性。
在技術上,無可厚非的選擇了netty這個東西,用springmvc,spring 和mybatis做整個系統的基礎框架。用redis去做sesion集羣管理,使得每個用戶id和session確保對應。使用阿里的dubbo服務化治理框架實現soa化。選擇activemq高速隊列做整流作用。
感興趣的朋友可以聯繫我,一起去做這件事情,歡迎加入QQ羣302633408 或者聯繫我的QQ329790217