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