23

我试图从我的客户发出自定义消息。我需要对其成功和失败执行一些操作。现在,我怎样才能将成功回调附加到发射方法?

对于错误回调,我使用了Exposed events doc 并让它工作

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

为了成功,我尝试了

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

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

我怎样才能获得成功处理程序?

4

2 回答 2

72

如果您查看文档,它会向您展示一个传递回调函数的示例-最后一个示例: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);
                  }
                 );
于 2014-02-28T05:11:05.843 回答
18

您的第二个代码没有做任何事情的原因是因为 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);
});

您可能可以使用此行为制作一个模块,以便您可以将它附加到您希望以这种方式处理的每条消息。

于 2012-11-25T10:27:01.927 回答