簡體   English   中英

如何使用 socket.io 將響應發送回客戶端?

[英]How to send response back to client using socket.io?

我有從客戶端到服務器的socket.emit調用作為響應,我想將文件名傳遞給客戶端,這在下面的代碼中沒有發生,不確定是什么實現的錯誤,我沒有看到任何錯誤。 如何使用socket.emit從服務器獲得響應?

客戶端.js

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

服務器..js

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

要確認消息,您的startRecording事件處理程序需要接受一個確認回調作為參數。 然后,您可以使用所需的數據調用它。 請參閱發送和獲取數據(確認)

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應用程序可能會有所幫助,以更全面地了解Websockets。

您的服務器代碼應如下所示:

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) {

感謝您提供這個有用的提示

這是一個 2020 年的“調用”示例調用,可以與帶有四個參數的分子微服務一起使用:

服務器在回調函數中使用兩個參數 err 和 res 響應角度承諾。

角 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);
    }
}

套接字 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;
    }
  });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM