2013-05-02 77 views
3

我正在實施一個客戶端 - 服務器API與長作業處理時間(在某些情況下,分鐘的順序)。一些API調用很短,並立即作出響應,但雙門轎車需要一些後端處理。我使用node.js作爲Web服務器。我的當前implementaion是如下 -異步RestFul vs Websocket

客戶端(瀏覽器)< - >節點的js < - >發動機

發動機是一後端處理,其處理的每個作業(C++代碼)。所有的交互都是http。現在,傳統上我會將異步ajax/restful請求和短作業作爲同步restful請求執行長作業。

我將不得不爲長處理作業(處理大量數據)的狀態更新 - 喜歡中間結果,完成百分比等

我在的WebSockets loolking作爲替代(我是比較新的這)。這裏是我的問題 -

  1. 我應該看看websockets的長工作,而不是異步restful api(我想避免處理客戶端超時,長輪詢等)?
  2. 如何將所有的請求移動到websockets(爲什麼要休息一下呢?)
  3. 一般而言,任何實現此架構的最佳實踐。 (之前,我從事與web服務器和引擎之間的交互的項目,作爲與自定義命令的簡單TCP連接。)

注意: - 我不擔心跨瀏覽器支持(尤其是舊版本)現在。

+0

像下面的建議一樣,nodejs和使用socket.io的websockets很好。如果瀏覽器不支持Websocket,它會落入另一個協議,但仍然有效。我認爲這將比尋找一個C++解決方案更爲強大。 – coffekid 2014-05-12 18:26:37

回答

1

我已經使用websockets在瀏覽器和C++後端之間進行通信,實現了一個Client-Server API。我們使用的庫是libwebsockets http://git.warmcat.com/cgi-bin/cgit/libwebsockets/

長時間運行和同時執行的命令在websocket上運行得非常好。可以從客戶端發送多個請求,並且服務器可以在準備就緒時做出響應,並可以按順序發送響應(或將響應合併爲單個響應)。

超時& Ajax所需的長輪詢內容變得更簡單,例如,當套接字斷開時,服務器可以檢測到客戶端斷開連接。

至於最佳做法,我基於這些文章的設計。 我們使用JSON來編碼消息。

如果您的服務器的nod​​e.js你可以看看Socket.io。這抽象了通信層,並可以選擇ajax,websockets等取決於可用的。