關於消息推送的猜想


一直一來都在使用淘寶的消息推送業務,感覺很好用,前一段時間QQ2012也實現了消息推送的業務,另外一些安卓軟件也實現了消息推送,我感覺消息推送這種技術或架構以后會在很長時間內流行。

引用淘寶開放平台對於消息推送的解釋:

主動通知(Stream api)是數據推送api,即數據主動推送服務,把淘寶產生的數據實時的推送給外部,app通過訂閱可接受這些實時消息。

消息推送業務說的簡單點:

服務端-----》》》啟動。

客戶端-----》》》啟動。

客戶端-----》》》連接服務端,並建立TCP長連接。

服務端-----》》》得到信息源(來源可能是別的系統的消息通知或自己在循環掃描)。

服務端-----》》》把這條信息放入一個隊列中,這個隊列一般用內存實現。

服務端-----》》》把這條信息推送到客戶端。

客戶端-----》》》接收到這條消息,並異步做處理。

 

這個只是一個大概的構架,其中會有很多問題。

1、如何保證服務端正常運行?

答:在服務端開一個監控服務,用來監控這個服務端正常運行,如果服務端異常,強制重啟,並通知管理員。

2、如何保證客戶端與服務端的連接不中斷?

答:服務端每25秒給客戶端發送一個特定消息包(淘寶稱為“心跳”),如果客戶端收到這個心跳,就說明連接是正常的,如果收不到這個包就說明連接已經中斷,這個時候客戶端應該放一個監控程序,強制重啟客戶端,並再次與服務端進行連接。

3、如何保證服務端與客戶端之間通信所傳送的數據的完整性?

答:兩端之間用json格式進行傳輸,然后在對方得到數據后進行反序列化解析,如果格式不正確則丟棄。

4、數據傳輸過程中如果數據丟失了怎么辦?

答:服務端增加一個功能,每15分鍾檢查一次,如果用戶沒有獲取信息,那就說明客戶端掉了,在下次連接后,那這個時間段發給客戶端。

 

淘寶是用java開發的,騰訊是用C++開發的,安卓也是用java開發的。我想用C#去開發一個自己實用的消息推送系統,並在開發完成后應用在公司的項目上面。

主要用到的技術:

1、多線程(可以確定)

2、Socket(可以確定)

3、Task(正在考慮中)

Socket中需要使用的協議:TCP

經過與一個大牛的交談,覺得上面的實現可能存在兩個問題:

1、心跳時間不能定下來,要根據具體的網絡環境來定。需要反復測試,換個網絡環境也有可能需要有改動。

2、協議有兩種可選的,TCP和HTTP,我暫定TCP,如果后期發現TCP協議有問題的話,我考慮使用HTTP協議。

另外,多線程需要使用線程池技術。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM