2015-06-14 60 views
2

使用標準TCP類可以發送和接收來自WebSocket服務器接口的數據/消息/幀嗎?使用TCP類與WebSocket服務器通信

或者我需要從根本上改變TCP類?

如果這是可能的,你能告訴我一個它可能是什麼樣子的小例子嗎? (編程語言並不重要)
例如,我發現這個Node.js的代表一個簡單的TCP客戶端代碼:

var net = require('net'); 

var client = new net.Socket(); 
client.connect(1337, '127.0.0.1', function() { 
    console.log('Connected'); 
    client.write('Hello, server!'); 
}); 

client.on('data', function(data) { 
    console.log('Received: ' + data); 
}); 

也許你能告訴我什麼話都被改變,使其與溝通一個WebSocket。

+0

webSocket在TCP上運行,因此您只需在套接字上說出webSocket原型協議即可。有許多開源實現可以使用或查看它的工作原理。你可能想知道所有的webSocket連接都是作爲一個HTTP請求來請求升級到webSocket協議,所以你必須經過這個確切的握手來初始化連接,然後一旦初始化,你必須說出webSocket協議。 – jfriend00

回答

3

Websockets是一種運行在TCP/IP上的協議,詳見standard's draft。因此,實際上,所有關於使用TCP/IP連接(TCP連接類/對象)來實現協議的特定握手和數據成幀。

用Ruby編寫的Plezi Framework就是這樣做的。

它包裝在其中的的TCPSocket類的包裝稱爲Connection(或SSLConnection),並通過一個協議輸入層的數據(WSProtocolHTTPProtocol類)運行該應用層,然後通過協議輸出層(WSResponseHTTPResponse類)到連接:

TCP/IP receive -> Protocol input layer -> 
    App -> Protocol output -> TCP/IP send 

Websocket握手始終作爲HTTP請求啓動。您可以閱讀the Plezi's handshake code here *。

*握手方法接收HTTPRequest,HTTPResponse和App Controller,並使用它們在切換到Websockets之前發送所需的HTTP答覆。

握手完成後,收到的每條消息都由消息幀(一個或多個)組成。你可以閱讀frame decoding and message extraction code used in the Plezi Framework here

在發回消息之前,它們被分成一個或多個Websocket Protocol frames using this code,然後它們是sent using the TCP/IP connection

如果你是谷歌,那裏有很多例子。我相信他們中的一些人會用你喜歡的編程語言。