【问题标题】:How to send response back to client using socket.io?如何使用 socket.io 将响应发送回客户端?
【发布时间】:2021-10-23 03:35:02
【问题描述】:

我有socket.emit 从客户端调用到服务器作为响应,我希望客户端的文件名没有发生在下面的代码中,不确定什么是错误的任何想法,我没有看到任何错误。如何使用socket.emit 获得来自服务器的响应?

client.js

 socket.emit('startRecording',function (response) {
            console.log('start recording emit response',response);
        });

server.js

 socket.on('startRecording',function () {
        var response;
        logsRecording(function (filename) {
            response = filename;
            return response;
            //socket.emit('filename',filename);
        });

【问题讨论】:

  • glitr-routerglitr-router-client 允许来自服务器和连接的客户端的响应功能,就像在 expressjs 中一样。

标签: node.js socket.io


【解决方案1】:

要确认消息,startRecording 事件的处理程序需要接受确认回调作为参数。然后,您可以使用所需的数据调用它。见Sending and getting data (acknowledgements)

socket.on('startRecording',function (socket, ackFn) {
    var response;
    logsRecording(function (filename) {
        ackFn(filename);
    });
});

或者,您可以在 client.js 中为您已注释掉的 filename 事件添加一个侦听器:

socket.emit('startRecording');
socket.on('filename', function(filename) {
    console.log('Filename received: ' + filename);
});

从标题“Integrating Socket.IO”开始遍历Get Started: Chat application 可能有助于更全面地了解 Websocket。

【讨论】:

    【解决方案2】:

    您的服务器代码应如下所示:

    socket.on('startRecording',function (callbackFn) {
        var response;
        logsRecording(function (filename) {
            callbackFn(filename);
        });
    

    如果你想从你的客户端传入数据:

    socket.emit('startRecording', {someData: 'value'}, function (response) {
    

    那么服务器将是:

    socket.on('startRecording',function (dataFromClient, callbackFn) {
    

    【讨论】:

      【解决方案3】:

      感谢您提供有用的提示

      这里有一个 2020 年“调用”示例调用,可以与具有四个参数的分子微服务一起使用:

      服务器在回调函数中使用两个参数 err 和 res 来响应 Angular Promise。

      Angular 9 套接字 io

      protected call(method: string, param?: any) {
          try {
              return new Promise((resolve, reject) => {
                  this.socket.emit("call", method, param, (err: any, res: unknown) => {
                      console.log(res);
                      if (err) { return reject(err); }
                      return resolve(res);
                  });
              });
          } catch (err) {
              console.error(err);
          }
      }
      

      Socket IO 服务器响应

        socket.on('call', function(method, param, callbackFn){ // call method, param, 
          console.log(param);
          switch (method) {
              case "test":
                  console.log("test detected");
                  callbackFn(null , {name:"test",email:"test"});          
                  break;
          }
        });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-02-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-28
        • 2014-09-13
        • 1970-01-01
        相关资源
        最近更新 更多