socket.io-如何使客户端等待响应?

时间:2020-05-14 03:13:04

标签: javascript node.js socket.io

这是场景,

我有2个节点,我们称它们为节点A和节点B。我希望节点A等待继续执行其余代码,直到它收到节点B的响应为止(而不是等待它收到的来自节点B的确认)来自节点A的消息,但我需要节点A等待,直到它从节点B接收到数据为止)。我认为我必须使用promise和async,但是似乎无法将其付诸实践。有什么建议吗?

编辑

NodeA.js

var io = require('socket.io')(http);

io.on('connection', function(socket){
    io.emit('triggerEvent', (response_from_B) => {
        console.log(response_from_B)
    });
});

NodeB.js

var socket = io_client.connect('url_A', {reconnect: true});
var data_from_B = 'some_date';
socket.on('connect', function() {
    socket.on('triggerEvent', (fn) => {

    // Some process with data_from_B

    fn(data_from_B);
    });
});

请记住,我仍然熟悉socket.io。节点A和节点B是两个不同的应用程序,它们使用socket.io相互通信。当用户访问节点A(应用程序A)时,该数据立即由socket.io与节点B(应用程序B)共享。在这种情况下,节点A充当服务器,而节点B充当客户端。反之亦然。我共享的摘录是当用户访问节点A时,它将像服务器一样,将数据发送到节点B时,它将像客户端一样。当节点A触发emit并从节点B接收数据时,我需要一些帮助,我假设使用回调。当我尝试上面的代码时,出现错误消息:

Callbacks are not supported when broadcasting

有关如何执行此操作的任何提示?还是有关于如何以不同方式处理此问题的建议?

1 个答案:

答案 0 :(得分:1)

nodeA.js

import io from "socket.io-client";

this.socket = io("urlNodeB:3000");
let data = { something: 'something' }

this.socket.emit('triggerEvent', data, (responseFromB) => {
    // continue with response from B
    console.log(responseFromB)
});

nodeB.js

const app = require('express')();
const server = require('http').createServer(app);
const io = require('socket.io')(server);

io.on("connection", socket => {

  socket.on('triggerEvent', (data, callback) => {

    // process data from node A
    let dataProcessing = data

    callback(dataProcessing);
  });
}

server.listen(3000, () => console.log('server up'));
相关问题