确认socket.io自定义事件

Vip*_* Kp 25 javascript performance node.js socket.io

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

socket.emit('message', msg);
Run Code Online (Sandbox Code Playgroud)

我已经看到一种机制,接收器将发送另一个自定义事件作为确认,但这将在我的聊天应用程序中添加数千个传输.请建议一个有效的方法.

rag*_*fin 42

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);
    });
});
Run Code Online (Sandbox Code Playgroud)

客户端:

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);
    });
});
Run Code Online (Sandbox Code Playgroud)

  • 我无法验证这个`a.socket.emit("echo",{payload:'test'},function(){console.log("success")})``永远不会记录但我收到了回音(9.16) ) (2认同)
  • socket.on('adminMessageClient', function(data, userID, callback) { callback("Ack response from server"); }); 服务器中的此语句抛出错误回调(“来自服务器的确认响应”);^ TypeError: undefined is not a function at Socket.<anonymous> (/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) (2认同)