【问题标题】:socket.on calls its callback too many timessocket.on 调用它的回调太多次
【发布时间】:2013-08-13 00:36:30
【问题描述】:

在第一次点击时,我的客户会输出这个:

Object {hello: "world"} 

然后在第二次点击时:

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

随着后续的点击,点击输出行的次数增加一。

客户

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);
});
});

【问题讨论】:

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


    【解决方案1】:

    每次触发 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'
        });
    });
    

    【讨论】:

    • 哦,谢谢,如果我需要在我的函数中使用套接字,但我有 var 吗?示例 $(document).on('click' , '#test', function(){ var id = $(this).id; //// 我在 socket.emit('news', { my: 'data', myId : id }); socket.on('news', function (data) { console.log(data); }); });从服务器创建回调?
    猜你喜欢
    • 2022-10-18
    • 1970-01-01
    • 1970-01-01
    • 2016-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多