2015-10-17 73 views
14

我目前正在使用Socket.IO來處理nodejs,以便在服務器和某些客戶端之間共享一些實時信息。客戶端應該只與服務器通信,而不是彼此通信。沒有http服務器的Socket.IO?

在windows上一切都很好,我可以共享信息,但是因爲它把東西放到linux vps上,所以我開始在ipv6套接字上啓動所有東西,這使我很難連接到客戶端瀏覽器從socket.io

我啓動服務器,這樣libary:

io = require('socket.io').listen(3000); 

至極工作正常,我可以連接。現在在Linux VPS我試圖阻止的IPv6使用的IPv4 ADRESS這樣

io = require('socket.io').listen(3000, '0.0.0.0'); 

,但沒有工作,而不是在Linux和Windows不支持。他,除非我這樣使用HTTP服務器不插座的ip我想將它綁定:

http = require('http').createServer().listen(3000, '0.0.0.0'); 
io = require('socket.io').listen(http); 

現在我的問題就是,我必須使用HTTP服務器來解決的插座結合的問題正確的本地IP和端口還是有其他解決方案?在我的第一行代碼中,socketio在後臺啓動一個http服務器,因爲它是一個web套接字,還是socketio在沒有http服務器的情況下工作?

非常感謝你:)

回答

20

Socket.io和WebSockets的一般,需要對初始握手HTTP服務器。所以即使你不提供一個http服務器的Socket.io,它也會爲你創建一個。

問題是您的io.listen(3000, '0.0.0.0')中的第二個參數被Socket.io忽略。你最好使用最後一個片段,因爲它基本上是Socket.io在幕後做的。唯一真正的區別是您可以控制要監聽的接口。

+0

非常感謝,這可以幫助我很多+ 1 – Arkensor