2011-11-13 73 views
1

我正在使用Node.js和socket.io在我的一個頁面中實現websocket。 server.js(Node.js的運行什麼的)有這樣的代碼:WebSocket未連接到socket.io

var http = require("http").createServer(), 
io = require("socket.io").listen(http); 

http.listen(8080); 

io.sockets.on("connection", function(socket) { 
     socket.emit("message", {hello:"world"}); 
}); 

這是我嘗試連接代碼:

var socket = new WebSocket("ws://92.60.122.235:8080/"); 
socket.onopen = function() { 
    alert("Socket has been opened!"); 
} 

當我加載頁面,沒有任何反應。我使用的是Chrome,我知道支持websockets。錯誤控制檯中沒有錯誤,並且如果我觀察來自命令行的socket.io服務請求,我看不到任何用戶連接。

據我所知這應該工作,任何人都可以解釋什麼可能會出錯?

+1

你爲什麼不使用socket.io客戶端?我相信他們有一些認證,所以這不應該工作。 –

+0

啊,不知道我需要使用客戶端。我會盡力回覆你。 –

+0

好的,在腳本標記中添加了socket.io,高於所有其他腳本,但它仍然無效。和以前一樣的問題。我已經檢查過服務器是否實際上服務於socket.io客戶端腳本。 –

回答

6

您需要一個socket.io客戶端才能通過一些認證階段,我相信。試試這個,它應該工作(客戶端JavaScript由socket.io本身提供服務,不用擔心)。

<script src="/socket.io/socket.io.js"></script> 
<script> 
    var socket = io.connect('http://localhost'); 
    socket.on('message', function (data) { 
    console.log(data); 
    socket.emit('helloworld', { msg: 'why do you so love to say hello world?' }); 
    }); 
</script> 

http://socket.io/#faq

爲什麼不叫它WebSocket如果實際的WebSocket不 現在和模擬天生的API?

Socket.IO確實比的WebSocket,即使 更多,如果WebSocket的選擇作爲傳輸和用戶正在瀏覽 您的網站有一個超現代的瀏覽器。 某些功能如心跳,超時和斷開連接對於實時 應用程序非常重要,但不是由開箱即用的WebSocket API提供的。

這與jQuery決定創建一個功能豐富的和簡單的$ .ajax API相反,而不是標準化XMLHttpRequest。

+0

謝謝,我嘗試添加socket.io客戶端腳本,但忘記更改代碼以實際使用它。使用io.connect和socket.on等工作完美,謝謝:) –

+0

alFReD NSH是正確的@Martin鋤頭你不應該使用WS的方法,因爲它只會在幾個瀏覽器上有WebSockets原生支持(前在FF上將不起作用)。 – alessioalex

+0

這是關於socket.io的最好的東西,它是跨瀏覽器的,跨域的,交叉的......,無處不在。它不僅僅是WebSockets。 –

0

您可以通過高級邏輯項目的博客文章「Websocket Server Demonstration」下載在Chrome,Firefox和IE(至少)中運行的網頁源代碼。該網頁是爲開發者設置的。