簡體   English   中英

使用HTTP / 2時,我們是否應該優先選擇SSE + REST而不是websocket?

[英]Should we prefer SSE + REST over websocket when using HTTP/2?

使用websocket時,我們需要一個專用的雙向通信連接。 如果我們使用http / 2,我們有一個由服務器維護的第二個連接。

在這種情況下,使用websocket似乎會引入不必要的開銷,因為使用SSE和常規http請求,我們可以通過單個HTTP / 2連接獲得雙向通信的優勢。

你怎么看?

在一個多路復用HTTP / 2 TCP連接中使用2個流(一個用於服務器到客戶端通信的流 - 服務器發送事件 (SSE),以及一個用於客戶端到服務器通信和正常HTTP通信的流)與使用2個TCP連接(一個用於正常HTTP通信,一個用於WebSocket)不容易比較。

里程可能因應用程序而異。

高架 ? 當然,連接數量增加了一倍。 但是,WebSocket可以壓縮消息,而SSE則不能。

靈活性? 如果連接是分開的,則可以使用不同的加密。 HTTP / 2通常需要非常強大的加密,這可能會限制性能。 另一方面,WebSocket不需要TLS。

明文WebSocket是否可以在移動網絡中運行? 根據我的經驗,這取決於。 防病毒,應用程序防火牆,移動運營商可能會限制WebSocket流量,或使其不太可靠,具體取決於您運營的國家/地區。

API可用性? WebSocket是一個更廣泛的部署和認可的標准; 例如,在Java中有一個官方API( javax.websocket ),另一個正在出現( java.net.websocket )。

我認為SSE是雙向Web通信技術上較差的解決方案,作為一種技術,它並沒有變得非常流行(沒有標准的API,沒有書籍等 - 與WebSocket相比)。 如果從HTML5中刪除它我不會感到驚訝,我不會錯過它,盡管它是第一個在Jetty中實現它的人之一。

根據您感興趣的內容,您必須根據具體情況進行基准測試或評估技術。

從Web開發人員的角度來看,Websockets和REST接口之間的區別在於語義。 REST使用請求/響應模型,其中來自服務器的每條消息都是對來自客戶端的消息的響應。 另一方面,WebSockets允許服務器和客戶端隨時推送消息,而與先前的請求無任何關系。

使用哪種技術取決於在您的應用程序環境中更有意義的內容。 當然,您可以使用一些技巧來模擬一種技術與另一種技術的行為,但通常最好在本書使用時更好地使用適合您的通信模型的技術。

服務器發送的事件是一項相當新的技術,尚未得到所有主流瀏覽器的支持,因此它還不是一個嚴肅的Web應用程序的選項。

這很大程度上取決於您要實現的應用程序類型。 如果您確實需要服務器和客戶端之間的雙向通信,WebSocket更合適,但您必須實現所有通信協議,並且所有IT基礎架構可能都不能很好地支持它(某些防火牆,代理或負載平衡器可能不支持WebSockets) 。 因此,如果您不需要100%雙向鏈接,我建議將SSE與REST請求一起使用,以獲取從客戶端到服務器的其他信息。 但另一方面,SSE帶有一些警告,例如在Javascript實現中,你不能覆蓋標題。 唯一的解決方案是傳遞查詢參數,但是您可能會面臨查詢字符串大小限制的問題。 因此,在SSE和WebSockets之間進行選擇實際上取決於您需要實現的應用程序類型。 幾個月前,我寫了一篇博文,可能會給你一些信息: http//streamdata.io/blog/push-sse-vs-websockets/ 雖然當時我們沒有考慮HTTP2,但這可以幫助您了解自己需要問什么問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM