即時通訊之路——技術選型

   因爲項目的需要,需要在產品中內嵌即時通訊和消息提醒這個功能。前期的調研過程中看了蠻多的產品,看過環信和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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章