2014-03-26 49 views
0

在socket.io網頁使用socket.io作爲一個跨瀏覽器的WebSocket的服務器例子很簡單:是否有必要使用HTTP Server使用socket.io與節點/它有哪些優點

var io = require('socket.io').listen(80); 

io.sockets.on('connection', function (socket) { 
    socket.on('message', function() { }); 
    socket.on('disconnect', function() { }); 
}); 

然而,我所看到的大部分使用socket.io的例子都包含一個Web服務器,例如Express或Node內置的'http'模塊。我一直在我的本地機器上使用socket.io,但我想知道在socket.io中使用http服務器的優點是什麼以及什麼時候有必要?

+1

沒有任何優勢,在使用socket.io類似於你的例子中,它會在該端口上創建http服務器實例,只能服務於socket.io hanshake。使用express而不是http模塊的區別很簡單,因爲socket.io綁定了一個http實例,所以在表達它的原始http模塊的時候沒有區別。 – Gntem

回答

2

Websocket請求和HTTP請求是不同的東西(儘管它們看起來很相似)並且需要不同的服務器來處理它們。如果你只想處理websocket流量,那麼你的例子就完全沒問題。但是,大多數涉及websockets的項目都是作爲更大的Web應用程序的一部分,它也處理常規HTTP通信(將HTML和靜態文件傳送到瀏覽器,處理REST API調用等),因此您經常會看到兩臺服務器(HTTP和Websocket)一起工作。一個常見的例子是使用Express和Socket.io作爲完整的HTTP + Websockets解決方案。

+0

不過,socket.io文檔顯示,如果不指定一個(使用內置或其他節點模塊),它將爲您創建一個http服務器。此服務器是否像節點的核心HTTP服務器一樣健壯? – Startec

+1

如果您只是指定一個端口,Socket.io將啓動核心節點HTTP服務器的內部實例。所以它就像你在處理連接時自己開始的那樣穩健。但是,服務器實例不會暴露給您的代碼,因此您無法對綁定事件執行任何操作。這就是爲什麼你會看到大多數網絡應用程序旋轉自己的服務器,並將它們提供給Socket.io。 – sgress454

相關問題