2013-02-18 81 views
3

這裏有很多websocket - >套接字包裝器(比如websockify),但是那裏有相反的東西嗎?具體來說,我希望能夠通過應用程序連接到TCP套接字,並將代理轉換爲websocket並轉移到另一個websocket服務器。TCP Socket到Websocket?

回答

4

從WebSocket客戶端到TCP服務器的橋接是一種通用解決方案,它將較低級別的TCP協議封裝到較高層級別的WebSocket協議。它允許瀏覽器(或其他websocket客戶端)與任意TCP服務器進行通信。請注意,客戶端(JavaScript)應用程序仍必須能夠對TCP服務器說的協議進行解碼/編碼。

反向操作不是通用的,需要從TCP客戶端應用程序到橋接器的消息進行特殊組幀,以便橋接器將知道如何將WebSocket消息編碼到TCP服務器。 WebSockets是基於消息的傳輸,而TCP是較低級別的流傳輸。 TCP傳輸層在協議本身中沒有消息的概念,因此必須在高層處理。換句話說,您將不得不做大量的工作來使您的TCP客戶端應用程序能夠與橋應用程序進行通信,因爲它將直接在應用程序中實現WebSocket客戶端。實際上,直接實現可能更少,因爲已經有大多數流行語言可用的WebSocket客戶端庫。

您將無法通過網橋將預先存在的TCP客戶端連接到現有的WebSocket服務器,而無需更改客戶端和網橋(以添加消息邊界和操作碼信息),或者您將需要特殊的WebSocket服務器忽略WebSocket消息邊界並將傳入數據視爲流(在較高層處理消息解析)。

也許你可以給一個用例,你認爲這可能有用嗎?

免責聲明:我做了websockify。

+1

那麼,例如,您的websockify在VNC服務器上使用,以使用noVNC。我需要將本地客戶端連接到該VNC服務器,但只有websockified部分纔會暴露給互聯網。所以看起來我可能真的有我的工作爲我.. – 2013-02-18 23:03:29

+0

標記這是答案,因爲它是當時最適用。感謝您的幫助,kanaka。 – 2013-03-06 18:59:39

+0

@ kanaka,你不是不得不在websockify中實現非邊界數據流嗎?從TCP服務器返回到瀏覽器客戶端的數據本質上最初是一個數據流。 – 2014-10-31 15:37:59

0

我不完全清楚你要問什麼,但WebSocket API主要適用於客戶端。

您如何對服務器端腳本進行編碼以及您使用何種語言完全取決於您。編寫服務器端腳本時,應該能夠選擇是否使用TCP套接字等。

+0

呃,什麼?我認爲這是比較清楚的。 – 2013-02-18 23:03:51

1

我不確定你在找什麼,但爲了幫助未來的人,我會寫我所做的解決我的問題。

我的問題: 我希望能夠舉辦noVNC我的web應用程序的服務器上,我想非WebSocket的VNC服務器能夠理解它,而無需使用websockify。

我的解決辦法: 我用ws-tcp-bridge Node.js的模塊彌合的WebSocket端口< --lport>其中noVNC客戶端將連接到與VNC TCP服務器的主機。

舉例: 這種情況從vncserver的機器運行以下命令:

ws-tcp-bridge --method=ws2tcp --lport=5555 --rhost=127.0.0.1:5902

這樣,我就能夠在端口5902舉辦非的WebSocket的vncserver並通過noVNC與它連接在港口5555

沒有測試過這個,但是與x11vnc vnc服務器配合得很好。