【问题标题】:websocket problem: cannot connect to node.js serverwebsocket问题:无法连接到node.js服务器
【发布时间】:2011-07-09 13:13:20
【问题描述】:

我有一个 node.js 服务器启动并使用 express 运行,我正在尝试使用 socket.io 服务器端和 chrome 12 客户端建立一个 websocket 连接。当我尝试连接时,socket.io 会输出一条调试消息,说“正在破坏非 socket.io 升级”,并且我的连接处理程序中的代码没有运行。同样在客户端,我的套接字的 readyState 是 2 (CLOSING)。

[编辑] socket的readyState从0变为2

【问题讨论】:

  • 你是在客户端使用socket.io.js连接服务器吗?
  • 你能把你的代码sn-p放在这里(或者github的链接)吗?
  • 你使用的是什么版本的 Node.js 和 socket.io?
  • 是否有不需要客户端库的 WebSocket 服务器端实现(也就是说,我可以使用内置的浏览器 WebSocket 方法)?

标签: javascript google-chrome node.js websocket


【解决方案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。然后,您所要做的就是在浏览器的“选项”或“Firebug”中查看控制台登录到 Web 浏览器的开发环境。

【讨论】:

  • 当我尝试将 socket.io.js 添加到我的客户端时,我收到客户端找不到“require”的错误。我查看了 socket.io.js 代码,它使用了 require,我认为这只是服务器端(即节点)的东西,而不是浏览器支持的 JavaScript。我们需要在客户端中包含另一个库来实现客户端“require”吗?还是我错过了什么?
  • @Elisabeth 你应该把它变成一个新问题。您不会在客户端中使用 require() 。在客户端中,您将使用
  • 我想通了;你必须使用 socket.io 服务器为客户端代码提供服务,这样它才能在客户端代码上发挥一些作用。
猜你喜欢
  • 2014-07-05
  • 1970-01-01
  • 2020-07-04
  • 2016-06-28
  • 2013-12-04
  • 1970-01-01
  • 1970-01-01
  • 2014-07-23
  • 1970-01-01
相关资源
最近更新 更多