成功回调socket.io中的emit方法

时间:2012-11-25 09:22:24

标签: node.js socket.io

我试图从我的客户端发出自定义消息。我需要对其成功和失败采取一些行动。现在,我如何将成功回调附加到emit方法?

对于错误回调,我使用了Exposed events doc并使其正常工作

socket.on('error', () -> console.log("Error Occured"))

为了成功,我试过

socket.emit('my custom method', {content: json},() -> console.log("Emitted"))

无论是成功还是失败,都不会触发此回调。

我如何获得成功处理程序?

2 个答案:

答案 0 :(得分:61)

如果您查看文档,它会向您显示一个传递回调函数的示例 - 最后一个示例: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 :(得分:15)

你的第二个代码没有做任何事情的原因是因为socketIO中的暴露事件只是为socket.on方法定义的。因此,您需要在服务器app.js中添加另一个emit来完成此操作

客户端会发出自定义消息并通过socket.emit将JSON数据发送到套接字,同时他还会获得一个处理成功回调的更新函数

socket.emit ('message', {hello: 'world'});
socket.on ('messageSuccess', function (data) {
 //do stuff here
});

服务器端从客户端获取来自消息emit的调用,并将messageSuccess发送回客户端

socket.on ('message', function (data) {
 io.sockets.emit ('messageSuccess', data);
});

您可能可以使模块不受此行为影响,因此您可以为每个要以此方式处理的邮件附加此模块。