尝试socket.io的一个简单例子时发现的问题
是在win7下运行的。例子如下,服务器端主要代码:
var socket = require('socket.io').listen(server);
socket.on("connection", function(es){
setInterval(function() {
es.emit('news', { hello: 'world' });
es.on('my other event', function (data) {
console.log(data.my);
});
}, 1000);
});
客户端主要代码:
function onLoad() {
var socket = io.connect('http://127.0.0.1:8888');
socket.on('news', function (data) {
console.log(data.hello);
socket.emit('my other event', { my: 'one shot' });
});
}
运行后,用chrome浏览器打开客户端网页,能在命令行中看到每1秒钟打印一行“world”。可是在cmd中,服务器端的打印情况如下(略去调试信息,空行实际不存在是为了说明需要加上的):
one shot
one shot
one shot
one shot
one shot
one shot
...
即,每一秒会打印的信息条数递增。我没有想明白这是为什么,向大家请教!
2 回复
setInterval(function() {
es.emit('news', { hello: 'world' });
es.on('my other event', function (data) {
console.log(data.my);
});
}, 1000);
这里每一秒都重复注册一个监听器啊es.on('my other event', function (data) { });
这个应该放在setInterval
外面注册才行。
的确如此。。没有注意到这个细节,谢谢啦