2012-10-10 50 views
0

我使用的是Aurora 17,Chrome 22和Firefox 16,我試圖創建一個簡單的聊天應用程序。我正在使用節點0.8.9。Firefox Nodejs Websocket

Firefox是得到的錯誤,它無法連接使錯誤

Firefox can't establish a connection to the server at ws://localhost/. 

我也與該端口嘗試過了,它具有相同的消息

Firefox can't establish a connection to the server at ws://localhost:4444/. 

這裏是我的代碼:

服務器代碼:

var http = require('http'); 
var net = require('net'); 

function onRequest(req, res) { 
    // Does enough to render a page and javascript 
} 
http.createServer(onRequest).listen(4444); 

var socket = new net.Socket(); 
socket.connect(4444, "localhost", function(){ 
    console.log("Socket Connected"); 
}); 

socket.on("message", function(message){ 
    console.log(message); 
}); 

客戶端代碼:

var WebSocket = window.WebSocket || window.MozWebSocket; 

var connection = new WebSocket('ws://localhost:4444'); 

connection.onopen = function() { 
    // Never runs 
    alert("This never runs :(") 
} 

connection.onerror = function(error) { 
    // Always runs here 
    console.log(error) 
} 

我得到一個輸出的Socket是從服務器上的日誌語句連接但Firefox無法連接到插座。

在Chrome上,沒有錯誤,但「onopen」永遠不會被觸發。使用connection.send(「消息」)不會向服務器發送任何內容並返回false。

回答

3

您正在服務器代碼中創建一個普通的TCP客戶端套接字並將其連接到您的HTTP服務器。這與創建瀏覽器可以連接的WebSocket服務器完全不同。使用爲此目的設計的庫(socket.io是非常常用的,因爲當瀏覽器不支持WebSockets時,它可以回退到備用傳輸)。

+1

但是,這是否解釋了爲什麼Chrome不起作用(沒有錯誤信息但無法發送)?它假設支持Websockets(Firefox也是如此)。同樣,Firefox有websockets但不能連接,Chrome有websockets但沒有發送任何東西。 – user654628

+0

瀏覽器在嘗試連接到聲稱是WebSocket服務器的事情時可能會有不同的行爲,但事實上並非如此:它依賴於實現,就像每個瀏覽器都有自己的呈現無效HTML方式的糟糕的舊日子。請注意,實現相關的錯誤恢復可以在相同瀏覽器的版本之間有所不同。 – ebohlman

+0

我明白了,我不知道。我想我不能使用套接字,因爲我發現我使用的主機(appfog)不支持套接字。我想我回到舊的獲取和發佈REST API服務。謝謝你的幫助。 – user654628