socket.on调用它的回调次数太多了

时间:2013-08-11 17:06:20

标签: jquery node.js sockets websocket socket.io

第一次点击时,我的客户输出:

Object {hello: "world"} 

然后在第二次点击:

Object {hello: "world"}
Object {hello: "world"} 

随后点击,点击输出的行数增加1。

客户端

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

$(document).on('click' , '#test', function(){
    socket.emit('news', { my: 'data' });
    socket.on('news', function (data) {
        console.log(data);
    });
});

服务器

var app = require('http').createServer(handler)
, io = require('socket.io').listen(app)
, fs = require('fs')

io.sockets.on('connection', function (socket) {
socket.on('news', function (data) {
    socket.emit('news', { hello: 'world' });
    console.log(data);
});
});

1 个答案:

答案 0 :(得分:4)

每次触发click事件处理程序时,您都会绑定一个新的事件处理程序。在回调之外绑定一次:

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

socket.on('news', function(data) {
    console.log(data);
});

$(document).on('click', '#test', function() {
    socket.emit('news', {
        my: 'data'
    });
});