2013-01-05 23 views
3

我目前使用WebSockets經歷。爲什麼的WebSocket的NodeJS實現不使用net.Server?

通過審查一些活動項目/像einaros/WS實現(和其他人一樣)我發現他們實現服務器自己。而不是使用提供tcp服務器的節點網絡模塊。這種方法有什麼理由嗎?

https://github.com/einaros/ws/blob/master/lib/WebSocketServer.js

問候

更新:

var server = net.createServer(function(c) { 

    c.on('data', function(data) { 
    // data is a websocket fragment which has to get parsed 
    }); 
    // transformToSingleUtfFragment is building a websocket valid 
    // byte fragment which contains hello as application payload 
    // and sets the right flags so the receiver knows we have a single text fragment 
    c.write(transformToSingleUtfFragment('hello')); 
    c.pipe(c); 
}); 
server.listen(8124, function() { //'listening' listener 
    console.log('server bound'); 
}); 

回答

5

的WebSocket是一個層疊在正常HTTP之上的協議。

它是如何工作基本上是瀏覽器發送一個HTTP UPGRADE請求,然後利用了HTTP 1.1的保活功能,保持開放的HTTP連接的底層TCP套接字。

然後數據通過,這本身是建立在TCP的頂部的WebSocket Protocol(連桿後面相當大RFC)發送。

由於HTTP部分是必需的,並且您需要重新使用該連接,所以使用普通的HTTP服務器而不是net.Server。否則,你必須自己實現HTTP處理部分。

實現WebSocket協議需要在任何情況下完成,並且由於任何HTTP連接都可以升級,因此理論上可以簡單地將WebSocket「服務器」連接到端口80上的普通HTTP服務器,正常的HTTP請求和WebSockets在同一個端口上。

+0

嗨,我已經通過RFC已經閱讀並明白一個HTTP服務器來處理升級請求的要求。建立連接HTTP服務器後卻沒有做的網頁套接字和WebSocket的服務器只需要分析和內置碎片什麼。現在我認爲,例如,接收到的片段與數據事件提供的數據相等。我用一個例子更新了我的問題,以瞭解這一點 – bodokaiser

相關問題