2012-10-10 46 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