WebSocket问题:无法连接到Node.js服务器。

6

我已经使用express搭建了一个node.js服务器,并尝试使用socket.io在服务器端和chrome 12客户端之间建立websocket连接。当我尝试连接时,socket.io输出一个调试信息,说“destroying non-socket.io upgrade”,而且我的连接处理程序中的代码没有运行。此外,在客户端上,我的socket的readyState是2(CLOSING)。

[编辑]

socket的readyState从0变为2。


你在客户端使用socket.io.js连接服务器吗? - Philipp Kyeck
你能把你的代码片段放在这里(或者是 Github 的链接)吗? - Ido Green
你使用的是哪个版本的Node.js和socket.io? - apose
2
有没有不需要客户端库的服务器端WebSocket实现(也就是说,我可以使用内置的浏览器WebSocket方法)? - Elisabeth
1个回答

1

请确保将socket.io.js文件插入到客户端代码中并使用它。如果您尝试在客户端创建自己的websocket,可能会遇到问题。

对于您的服务器,请执行以下操作:

var app = require('express').createServer()
  , io = require('socket.io').listen(app);

app.listen(80);

app.get('/', function (req, res) {
  res.sendfile(__dirname + '/index.html');
});

io.sockets.on('connection', function (socket) {
  socket.emit('news', { hello: 'world' });
  socket.on('my other event', function (data) {
    console.log(data);
  });
});

对于你正在提供的HTML文件,可以使用类似这样的代码:

<script src="/socket.io/socket.io.js"></script>
<script>
  var socket = io.connect('http://localhost');
  socket.on('news', function (data) {
    console.log(data);
    socket.emit('my other event', { my: 'data' });
  });
</script>

请确保您将/socket.io/socket.io.js从您的Web服务器目录中提供服务。然后,您所要做的就是在网页浏览器的开发环境选项或使用Firebug时观察控制台日志。


当我尝试将socket.io.js添加到我的客户端时,出现了一个错误,客户端找不到"require"。我查看了socket.io.js代码,它使用了require,我认为这只是服务器端(即node)的事情,而不是浏览器支持的JavaScript。是否有另一个库需要在客户端中包含以实现客户端的"require"?还是我漏掉了什么? - Elisabeth
@Elisabeth,你应该将其作为一个新问题提出。在客户端中,你不会使用require()。在客户端中,你将使用<script src=...>。 - EhevuTov
我弄清楚了,问题在于必须使用socket.io服务器为客户端代码提供服务,以便它可以在客户端代码上执行一些魔法。 - Elisabeth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接