获得基本的socket.io示例工作

即使运行非常基本的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

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

这已经不是真正的预期。 然后,对于client.htm (或者至less这就是我认为我应该做的 – 将其粘贴到client.htm文件中),我只能看到一个空白的屏幕。 不是很奇怪,因为它开始包含一个不存在的文件/socket.io/socket.io.js ,但即使将其更改为host.js (我认为它应该是)并不会改变这一事实,我只得到一个空白的屏幕…

我无能为力

EADDRINUSE意味着地址已经在使用,所以无法获取套接字。 其他东西已经在你的机器上的80端口上运行了吗? 80是Web服务器常用的。

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

你看到一个空白文件的原因是它没有连接到节点服务器(因为它无法获得套接字),所以on新闻事件将永远不会被调用。 它甚至可能连接到任何其他正在运行的80的套接字,永远不会发出该事件:)

解决端口冲突之后,当你运行服务器时,应该说:

信息 – socket.io启动

现在正在等待连接。

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

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

编辑:我只是试了一下,在HTM文件,我不得不设置相对path到socket.io.js文件。 通过npm安装后,它在我的目录中。

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

确保path相对于htm文件(不以/开头)。 以下是我如何发现我的位置:

 find . -name 'socket.io.js' 

在Win上:dir socket.io.js / s

你也应该运行主机(在* nix你可能需要sudo在前面):

 node host.js 

最后一件事情是我在做样本的时候改变了htm文件中的几行内容,所以当事件发生时我可以看到一个提示消息框:

 socket.on('news', function (data) { alert(JSON.stringify(data));