这是我的nodejs代码:
var io = require('socket.io').listen(8011);
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>
当我使用 Node a.js 运行它时,出现以下错误:
node.js:134
throw e; // process.nextTick error, or 'error' event on first tick
^
TypeError: Object 8011 has no method 'listeners'
at new <anonymous> (/home/zjm1126/node_modules/socket.io/lib/socket.io/listener.js:29:31)
at Object.listen (/home/zjm1126/node_modules/socket.io/lib/socket.io/index.js:11:10)
at Object.<anonymous> (/home/zjm1126/桌面/app/a.js:1:93)
at Module._compile (module.js:407:26)
at Object..js (module.js:413:10)
at Module.load (module.js:339:31)
at Function._load (module.js:298:12)
at Array.<anonymous> (module.js:426:10)
at EventEmitter._tickCallback (node.js:126:26)
但这是 http://socket.io/ 中的演示代码,为什么我会收到此错误?
更新:
当我运行npm update socket.io
时,服务器端正在运行
但是客户端给出了这个错误:
io is not defined
var socket = io.connect('http://localhost:8011');
这有什么问题吗?
最佳答案
您在下面指定的代码适用于 socket.io 0.7.x(API),而不适用于 0.6.x,因此这可能是错误所在。您应该尝试npm update socket.io
。根据 npm ls
我的依赖项如下:
alfred@alfred-laptop:~/node/socketio-demo$ npm ls
/home/alfred/node/socketio-demo
└─┬ socket.io@0.7.2
├── policyfile@0.0.3
└── socket.io-client@0.7.2
您还使用来自同一node.js服务器或其他服务器(例如PHP或其他服务器)的socket.io客户端html吗?
<小时/>我也通过 PHP 进行了测试:
mkdir socketio-demo`
cd socketio-demo`
gedit server.js # my quick/dirty editor
<小时/>
var io = require('socket.io').listen(8011);
io.sockets.on('connection', function (socket) {
socket.emit('news', { hello: 'world' });
socket.on('my other event', function (data) {
console.log(data);
});
});
<小时/>
alfred@alfred-laptop:~/node/socketio-demo$ node server.js
info - socket.io started
<小时/>
我还有一个在端口 80 上运行的 PHP 服务器:
gedit socket.php
<小时/>
<script src="http://localhost:8011/socket.io/socket.io.js"></script>
<script>
var socket = io.connect('http://localhost:8011/');
socket.on('news', function (data) {
console.log(data);
socket.emit('my other event', { my: 'data' });
});
</script>
<小时/>
在另一台主机上时,您需要更新 <script src="http://localhost:8011/socket.io/socket.io.js"></script>
指向您的 socket.io 服务器
和var socket = io.connect('http://localhost:8011/');
指向您的 socket.io 服务器。使用这个设置,我让它正常工作,没有任何问题。
关于node.js - 我的nodejs简单代码有什么问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6489583/