標籤:

伺服器端應如何設計才能實現「秒推」?

大家已經討論很多關於如何實現推送的方案,比如長連接、Apple Push Notification Service、XMPP、Microsoft Push Notification Service、Exchange ActiveSync 等等,但主要集中於客戶端與伺服器端之間這一段。我的提問僅指伺服器端的設計思路。

具體舉例比如,微博A網友給B網友發私信,假設B網友的客戶端已經和伺服器端建立了長連接在等待消息,但同一時刻掛在微博伺服器上等待的長連接數量應該是非常多的,伺服器端如何設計才能迅速找到B網友那個長連接,以快速的給那個長連接回復消息?

2014/11/10補充:發現目前四個答案中三個有「軟廣告」嫌疑,所以強調一下討論的是實現原理。


很簡單,找好的推送服務商,測試下延遲,畢竟人家都是專業做推送的。

我們測試下來的結果是個推最快,百度第二,極光慢一些。


可以參考手機網路,分層。

分很多個小的接入伺服器,根據客戶ID分配。收到消息後根據用戶ID查找記錄定位到接入伺服器,然後再找到用戶連接


謝邀!

嘗試聊下思路。

核心需要解決的問題是:

1. B 在不在線;

2. B 在哪個接入伺服器上 online;

或者說,是路由問題。

有 2 個基本思路:

1)分而治之,按 uid 分段。

比如電信系統手機號是這樣。

這種負載不太是問題;但靈活性不夠好。

2)集中路由表。

簡單高效,靈活性好。

但這個模塊要做得性能足夠好,當然也還是要考慮分布問題。10 億也可以承擔。

JPush 目前是這個思路做的。

利益相關:極光推送團隊成員。


組了個團隊去做一個項目,結果發現推送方面團隊實力不是很足,做不到秒推,到達率和到達時間上都不是很理想。於是當時想到了國內幾個相對做得比較好的推送方,當時測試了小米推送、極光、個推和百度,測試下來還是個推相對穩定些,到達率和推送速度確實是要快上一些,也沒有分發量的限制


https://github.com/m0ver/tinystruct2.0/blob/master/src/tinystruct/examples/smalltalk.java


推薦閱讀:

iPhone 的推送為什麼可以在網路沒有連接的情況下使用?
我發郵件給 Kindle的郵箱,為什麼沒有推送到我的 Kindle 上去?
mqtt各種broker如何選擇?
知乎的 comet 實現機制是怎樣的?

TAG:推送Push |