【问题标题】:Acknowledgment for socket.io custom eventsocket.io 自定义事件的确认
【发布时间】:2013-12-06 06:34:44
【问题描述】:

我正在寻找一种方法来确认 socket.emit 调用。

socket.emit('message', msg);

我看到了一种机制,接收者会发送另一个自定义事件作为确认,但这会在我的聊天应用程序中添加数千个传输。请教一个有效的方法。

【问题讨论】:

  • here,寻找得到确认

标签: javascript performance node.js socket.io


【解决方案1】:

emit 方法的第三个参数接受一个回调,该回调将被传递给服务器,以便您可以使用任何您想要的数据进行调用确认。这实际上非常方便,并且省去了配对呼叫响应事件的工作量。

我正在用我刚刚测试的一些代码更新我的答案。

首先在服务器端:

   io.sockets.on('connection', function (sock) {

    console.log('Connected client');
    sock.emit('connected', {
        connected: 'Yay!'
    });

    // the client passes 'callback' as a function. When we invoke the callback on the server
    // the code on the client side will run
    sock.on('testmessage', function (data, callback) {
        console.log('Socket (server-side): received message:', data);
        var responseData = {
            string1: 'I like ',
            string2: 'bananas ',
            string3: ' dude!'
        };
        //console.log('connection data:', evData);
        callback(responseData);
    });
});

客户端:

console.log('starting connection...');
var socket = io.connect('http://localhost:3000');
socket.on('error', function (evData) {
    console.error('Connection Error:', evData);
});
// 'connected' is our custom message that let's us know the user is connected
socket.on('connected', function (data) {
    console.log('Socket connected (client side):', data);

    // Now that we are connected let's send our test call with callback
    socket.emit('testmessage', {
        payload: 'let us see if this worketh'
    }, function (responseData) {
        console.log('Callback called with data:', responseData);
    });
});

【讨论】:

  • 我无法验证 a.socket.emit("echo", {payload:'test'}, function(){console.log("success")}) 永远不会被记录,但我收到了回声 (9.16)
  • 是的,它在浏览器中
  • @megawac 你需要从接收端调用确认函数
  • 并且还请记住,您的“连接”事件不允许您确认它。在这种情况下,您确实需要一个您自己发出的配对响应事件。
  • socket.on('adminMessageClient', function(data, userID, callback) { callback("Ack response from server"); });服务器中的此语句正在抛出错误回调(“服务器的确认响应”); ^ TypeError: undefined is not a function at Socket. (/var/node_server/newChatServer.js:141:3) at Socket.EventEmitter.emit [as $emit] (events.js:101:17) at SocketNamespace .handlePacket (/var/node_server/node_modules/socket.io/lib/namespace.js:335:22)
猜你喜欢
  • 2014-01-02
  • 2016-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-15
  • 1970-01-01
  • 2013-08-05
  • 1970-01-01
相关资源
最近更新 更多