2017-02-15 80 views
1

我設計一個Web API,這將使客戶端的opprtunity(其他應用程序),以推動一些工作要求,立即收到工作請求的一些ID,後來收到的工作請求的結果。 這種交互的典型方法是什麼? 作爲提供工作請求的結果讓我想起了服務器推送交互我想到了SSE(服務器發送事件)和webscoket技術,inclinig到的WebSockets(如客戶端可以使用所有類型的requets的相同的連接和接收各種反應)。這對我的目標來說是不錯的選擇嗎?以及如何縮放?推基於API設計

+0

您的問題太過寬泛IMO。由於我不是一個網絡應用程序的傢伙,所以沒有投票結束。 – einpoklum

+0

@einpoklum爲什麼如此?問題是關於websocket技術是否適合所描述的api設計方法,如果不是,我想知道什麼是更好的方法。 – maks

+0

@maks,軟件設計問題適合不同的SO站點,比如[this one](http://softwareengineering.stackexchange.com)... StackOverflow社區適用於更實用的基礎問題。 – Myst

回答

1

問題是關於websocket技術是否適合所描述的api設計方法,如果不是,我想知道什麼是更好的方法。這對我的目標來說是不錯的選擇嗎?

webSocket連接非常適合在未來某個不確定的時間接收結果,並且這將是推薦的方法。從客戶端向服務器

其他要求可以是Ajax調用或發送的WebSocket的消息,主要是取決於是否還有其他原因,使請求作爲AJAX的呼叫。如果您已經建立了webSocket連接,那麼這是一種方便,簡單且快速的與服務器通信的方式。

以你在做什麼的各個部分:

推動一些工作請求(從客戶端到服務器)。

這可以通過Ajax或webSocket完成。如果沒有其他理由有已經建立的webSocket連接,那麼這通常是一個Ajax調用。

立即收到工作請求

這實際上是更容易一些做一個Ajax請求,因爲Ajax是一種請求/響應協議,因此,如果您通過Ajax發送工作請求的一些ID,將ID作爲對該Ajax請求的響應返回將是微不足道的。你也可以通過webSocket來完成,但webSocket只是一個消息協議。將工作請求發送到服務器時,可以通過webSocket發送(如前所述)。而且,服務器可能然後立即發回的工作證,但客戶必須開發一些方法,因爲這兩個消息就不會彼此任何天然連接到相關回來與先前發送的請求的工作證。該相關性可以做的一種方式是在發送初始請求時,客戶端生成一個臨時ID或散列值(它確實可以是任何東西,是針對客戶獨特如時間戳),然後服務器會發送相同的臨時ID發回工作ID。所有這些對於像HTTP/Ajax這樣的請求/響應協議來說都是微不足道的。

後來收到工作請求

HTTP輪詢,網頁套接字或SSE都可以用來的結果。投票顯然不是特別有效。我知道的WebSocket會很好地工作,這和它會爲服務器要發送到客戶端的推送方式的任何其他項目提供一個開放的管道。 SSE也可以用來解決這個問題(向客戶推送數據),儘管我個人沒有任何經驗。