純 http 上的雙向通信 最近大概看了下 rxJava 的訂閱者模式,然後突發奇想有沒有可能用類似的思路實現純 http 上的雙向通信 A 是傳統的 http 伺服器 B 是普通的客戶端,假設我們能夠在 B 上啟動一個簡易的 http server 並且有辦法實現公網訪問 然後通過類似事件訂閱的方 ...
純 http 上的雙向通信
最近大概看了下 rxJava 的訂閱者模式,然後突發奇想有沒有可能用類似的思路實現純 http 上的雙向通信
A 是傳統的 http 伺服器
B 是普通的客戶端,假設我們能夠在 B 上啟動一個簡易的 http server 並且有辦法實現公網訪問
然後通過類似事件訂閱的方式實現雙向通信。
例:
要實現的功能:
B 是美團外賣商家端,當有用戶下單時,B 能夠收到推送
A 是美團伺服器,當用戶下單時,給 B 發請求通知 B
實現思路:
A 存兩個 model, 一個是訂單 orders,一個是訂單的訂閱者 subscribers(訂單和B這類客戶端的訂閱關係)
商家在 B 上登錄後,像 A 發一個請求,帶著 B 的外網訪問路徑(外網 ip 或者一種自建的規則),以及 B 要訂閱的
對象、對象規則和事件(比如 對象為 “訂單”, 規則為 訂單的商家欄位為當前商家,事件為 “新建”)
當消費者下了一個訂單,即新建了一個訂單後, A 從 subscribers 表中找符合條件的訂閱者,如果找到,就向
訂閱者的 ip 發請求。
分割
或者說,如果在客戶端上實現這個不太可能,或起一個 http server 不好保活,或費電因而意義不大的話,
把 A 和 B 都假設為伺服器,在兩台伺服器間實現這樣的基於 http 的雙向通信有沒有意義呢?
與傳統長連接實現的雙向通信相比,代價當然是 A 和 B 都需要啟一個服務埠。好處是純 http 實現,而且不需要維護長連接的開銷,真正非同步,僅需要發消息時建立 http 鏈接。
只是突發奇想,還沒有深入研究雙向通信、長連接、websocket 等的原理。歡迎懂的大大砸磚拋我~~