确认socket.io自定义事件

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

socket.emit('message', msg); 

我已经看到一个机制是接收器将发送另一个自定义事件作为承认,但这将增加数以千计的传输在我的聊天应用程序。 请build议一个有效的方法。

emit方法的第三个参数接受一个将被传递给服务器的callback函数,这样你就可以用你希望的任何数据调用确认函数。 这实际上非常方便,节省了配对呼叫响应事件的努力。

我用我刚testing的一些代码更新我的答案。

首先在服务器端:

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