尝试socket.io的一个简单例子时发现的问题
发布于 12 年前 作者 andy24boyking 4848 次浏览 最后一次编辑是 8 年前

是在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外面注册才行。

的确如此。。没有注意到这个细节,谢谢啦

回到顶部