2016-02-05 81 views
0

我正在開發一個具有用Java編寫的桌面客戶端的Web應用程序。我正在使用WebSockets在NodeJS服務器和Web客戶端之間進行通信。我應該使用WebSocket還是普通的TCP套接字?

我想決定是否使用WebSocket或普通的TCP套接字在NodeJS服務器和桌面客戶端之間進行通信。

據我所知,使用WebSocket會比較容易,但也有點重。

如何做出這個決定?

回答

2

這取決於你的確切使用情況:

  • 的WebSockets被首先進行HTTP連接,然後升級這WebSocket協議建立的。因此,用簡單的套接字交換第一條消息所需的開銷要大得多。但是如果你只是保持連接打開並通過一個建立的套接字交換所有消息,那麼這並不重要。
  • 由於屏蔽,性能開銷很小。但這些主要是簡單的計算(XOR),所以它們不應該太重要。
  • 由於成幀需要更多的帶寬。但這不應該太重要。
  • 從積極的方面來看,它與現有的防火牆和代理服務器相比效果更好(但並不總是完美),因此它可以更輕鬆地集成到現有的基礎設施中。您還可以使用TLS更輕鬆地使用它,因爲這僅僅是HTTPS內部的WebSocket升級,而不是HTTP內部的升級。

因此,如果您必須將防火牆和代理集成到現有基礎架構中,那麼WebSockets可能是更好的選擇。如果您的應用程序性能很高,需要每一個微小的帶寬,處理器時間和最低(初始)延遲,那麼普通套接字就更好。

除此之外,如果延遲真的是個問題(如使用實時音頻),那麼您最好不要使用任何基於TCP的協議,如TCP套接字或WebSockets。在這種情況下,使用UDP並處理應用程序內潛在的數據包丟失,重新排序和重複可能會更好。

1

是否有適當的WebSocket庫用於實現桌面客戶端的任何技術? The websocket protocol不是微不足道的,它是一種相當新的技術,尚未得到普遍支持。當您必須從頭開始使用純TCP/IP套接字來實現WebSocket時,您可以計劃花費幾天時間,直到基本協議實現工作,並且可以開始在其上實現自己的協議(在那裏,完成了這項工作,拋出它離開了一個圖書館的時候,比我自己的實施工作更好)。

但是,如果您可以爲您的桌面客戶端找到Websocket實現,那麼您可以通過讓網站和桌面客戶端以相同的方式與node.js後端進行通信來節省服務器端的一些工作和複雜性。