让基本的 socket.io 示例正常工作

2024-01-03

我什至无法运行非常基本的 socket.io 示例。例如其网站欢迎页面上的第一个示例:

var io = require('socket.io').listen(80);

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

在服务器端和

<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>

在客户端。如果我将服务器端保存在host.js文件,以及客户端中的client.htm文件,然后我运行npm host.js, I get

   info  - socket.io started
   warn  - error raised: Error: listen EADDRINUSE

这已经不是真正的预期了。那么,对于client.htm(或者至少我认为我应该这样做——将其粘贴到 client.htm 文件中),我只得到一个空白屏幕。这并不奇怪,因为它首先包含一个不存在的文件/socket.io/socket.io.js,但即使将其更改为host.js(我认为应该是这样)并没有改变我只得到一个空白屏幕的事实......

我一无所知。


EADDRINUSE 表示该地址已被使用,因此无法获取套接字。您计算机上的端口 80 上是否已运行其他程序? 80 通常由 Web 服务器使用。

您也可以在其他端口上尝试。

您看到空白文件的原因是它没有连接到节点服务器(因为它无法获取套接字),因此永远不会调用 on news 事件。它甚至可能连接到 80 上运行的任何其他设备的套接字,而这些设备永远不会发出该事件:)

解决端口冲突后,当您运行服务器时,它应该只是说:

信息-socket.io 已启动

现在它正在等待连接。

确保将 htm 行更新到您的端口。例如,如果 81:

var socket = io.connect('http://localhost:81'); // note the :81

编辑: 我刚刚尝试了一下,在 htm 文件中我必须设置 socket.io.js 文件的相对路径。通过 npm 安装后,它位于我的目录中。

<script src="node_modules/socket.io/node_modules/socket.io-client/dist/socket.io.js"></script>

确保该路径相对于 htm 文件(不以 / 开头)。我是这样找到我的位置的:

find . -name 'socket.io.js'

胜利时: 目录socket.io.js /s

您还应该使用以下命令运行主机(在 *nix 上,您可能需要在前面加上 sudo):

node host.js

我在尝试该示例时所做的最后一件事是将 htm 文件中的几行更改为此,以便在事件发生时我可以看到一个警报消息框:

socket.on('news', function (data) {
   alert(JSON.stringify(data));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

让基本的 socket.io 示例正常工作 的相关文章

随机推荐