【问题标题】:Firefox Nodejs Websocket火狐Nodejs Websocket
【发布时间】:2012-10-10 15:50:15
【问题描述】:

我正在使用 Aurora 17、Chrome 22 和 Firefox 16,我正在尝试创建一个简单的聊天应用程序。我正在使用节点 0.8.9。

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("a message") 不会向服务器发送任何内容并返回 false。

【问题讨论】:

    标签: javascript html node.js websocket chat


    【解决方案1】:

    您正在服务器代码中创建一个普通的 TCP 客户端套接字并将其连接到您的 HTTP 服务器。这与创建浏览器可以连接的 WebSocket 服务器完全不同。使用为此目的设计的库(socket.io 非常常用,因为当浏览器不支持 WebSockets 时,它可以回退到备用传输)。

    【讨论】:

    • 但这是否解释了为什么 Chrome 无法工作(没有错误消息但无法发送)?假设支持 Websockets(Firefox 也是如此)。同样,Firefox 有 websockets 但无法连接,Chrome 有 websockets 但没有发送任何内容。
    • 浏览器在尝试连接到声称是 WebSocket 服务器但实际上不是的东西时,它们的行为可能会有所不同:它依赖于实现,有点像过去每个浏览器都有自己的自己呈现无效 HTML 的方式。请注意,依赖于实现的错误恢复可能因同一浏览器的不同版本而异。
    • 我明白了,我不知道。我想我当时不能使用套接字,因为我发现我正在使用的主机(appfog)不支持套接字。我想我回到旧的获取和发布 REST API 服务。感谢您的帮助。
    猜你喜欢
    • 2011-01-04
    • 2011-08-02
    • 2013-10-30
    • 2011-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多