这是我的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>
当我使用节点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');
这有什么问题?
答案 0 :(得分:0)
您在下面指定的代码适用于socket.io 0.7.x(API)而不适用于0.6.x,因此这是错误所在的位置。你应该尝试npm update socket.io
。根据{{1}}:
npm ls
您是否也使用来自同一node.js服务器的socket.io客户端html或其他服务器(例如PHP或其他东西)。
我也通过PHP进行测试:
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
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);
});
});
我还在端口80上运行了一个PHP服务器:
alfred@alfred-laptop:~/node/socketio-demo$ node server.js
info - socket.io started
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>
以指向您的socket.io服务器
和<script src="http://localhost:8011/socket.io/socket.io.js"></script>
指向您的socket.io服务器。使用这个设置我完全没有任何问题。
答案 1 :(得分:0)
ZJM - 我有一个与你相同的版本(试图让它开箱即用)。我得到了一个不同的错误(socket.js文件正在提供和记录,但没有发生连接)。我认为(90%肯定 - 似乎也有一些缓存问题)在客户端,提供没有参数的socket.io解决了这个问题。
不知道这对你有帮助,但希望能