【发布时间】:2013-12-06 06:34:44
【问题描述】:
我正在寻找一种方法来确认 socket.emit 调用。
socket.emit('message', msg);
我看到了一种机制,接收者会发送另一个自定义事件作为确认,但这会在我的聊天应用程序中添加数千个传输。请教一个有效的方法。
【问题讨论】:
-
见here,寻找得到确认。
标签: javascript performance node.js socket.io
我正在寻找一种方法来确认 socket.emit 调用。
socket.emit('message', msg);
我看到了一种机制,接收者会发送另一个自定义事件作为确认,但这会在我的聊天应用程序中添加数千个传输。请教一个有效的方法。
【问题讨论】:
标签: javascript performance node.js socket.io
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)