socket.io 中的 emit 方法的成功回调
Posted
技术标签:
【中文标题】socket.io 中的 emit 方法的成功回调【英文标题】:Success Callback for emit method in socket.io 【发布时间】:2012-11-13 00:54:11 【问题描述】:我正在尝试从我的客户发出自定义消息。我需要对其成功和失败执行一些操作。现在,如何将成功回调附加到 emit 方法?
对于错误回调,我使用了Exposed events doc 并使其正常工作
socket.on('error', () -> console.log("Error Occured"))
为了成功,我试过了
socket.emit('my custom method', content: json,() -> console.log("Emitted"))
无论成功还是失败,都不会触发此回调。
如何获取成功处理程序?
【问题讨论】:
请不要接受this 的答案,支持this 一个。 【参考方案1】:如果您查看文档,它会向您展示一个传递回调函数的示例-最后一个示例:http://socket.io/docs/#Sending-and-getting-data-acknowledgements
前 服务器:
socket.on('formData',
function(data, fn)
// data is your form data from the client side
// we are here so we got it successfully so call client callback
// incidentally(not needed in this case) send back data value true
fn(true);
);
客户:
socket.emit('formData',
data,
function(confirmation)
// send data
// know we got it once the server calls this callback
// note -in this ex we dont need to send back any data
// - could just have called fn() at server side
console.log(confirmation);
);
【讨论】:
这不是反向工作吗?我尝试从服务器发送一个回调函数并在客户端调用它,但似乎回调甚至没有到达客户端。 +1 另请注意,这不适用于广播github.com/cayasso/primus-rooms/issues/28 当您可以传递回调函数并使用 socket.on 事件上的数据触发回调时,我认为标记的答案是一种草率的方法。【参考方案2】:你的第二个代码没有做任何事情的原因是socketIO中暴露的事件只是为socket.on
方法定义的。因此,您需要在服务器 app.js 中添加另一个发射来完成此操作
客户端发出自定义消息并通过 socket.emit 将 JSON 数据发送到套接字,他还获得一个处理成功回调的更新函数
socket.emit ('message', hello: 'world');
socket.on ('messageSuccess', function (data)
//do stuff here
);
服务器端从客户端发出的消息中获取调用,并将 messageSuccess 发送回客户端
socket.on ('message', function (data)
io.sockets.emit ('messageSuccess', data);
);
您可能会根据这种行为制作一个模块,以便为您希望以这种方式处理的每条消息附加它。
【讨论】:
我有点疑惑,哪个更好,emit
来自服务器的事件或来自客户端的回调函数。 socket.emit ('message', hello: 'world', function() //do stuff here );
这两种方式有区别吗?
回调函数不应该仍然有效吗?为什么回调不能 100% 工作,我可以让回调工作 50%。
这不应该是“正确”的答案,因为 socket.io 支持“确认函数”,您可以在其中传递在“另一端”调用的函数。请查看其他分析器!
虽然这可能不是“正确”的答案。但是当使用一个非标准的(或不完整的)socket.io 客户端(如 python-socketio)时,还没有确认支持,这就是你这样做的方式。如果我错了,请纠正我。以上是关于socket.io 中的 emit 方法的成功回调的主要内容,如果未能解决你的问题,请参考以下文章