Дождитесь ответа от сокета и отправьте его с rabbitmq - PullRequest
0 голосов
/ 09 июля 2019

У меня есть 5 серверов, к которым я подключаюсь по net.Socket () и слушаю данные, поступающие с каждого сервера.Я храню все клиенты в массиве.Код выглядит так:

 for (let controllerAndDoors of controllersAndDoors) {

    let client = new net.Socket();  

    // add the client to the clients array
    clients.push(client);

    client.connect(controllerAndDoors.controller.Port, controllerAndDoors.controller.Ip, function () {
        console.log('\x1b[32m%s\x1b[0m', `Connected to controller: ${client.remoteAddress}:${client.remotePort}`);
    });

    client.on('data', function (data) {
        var date = new Date().toISOString();
        console.log(`${date}: Received message from: ${client.remoteAddress}:${client.remotePort}`);
        actionHandler.checkMessageFromController(client, data, controllerAndDoors);
    });

    client.on('timeout', function () {
        console.log('Client connection timeout');
    });

    client.on('error', function (err) {
        console.error('\x1b[31m%s\x1b[0m', err);

        // try to reconnect
        if (err.code === "ECONNRESET" || "ETIMEDOUT") {
            client.connect(controllerAndDoors.controller.Port, controllerAndDoors.controller.Ip, function () {
                console.log('\x1b[32m%s\x1b[0m', `Connected to controller: ${client.remoteAddress}:${client.remotePort}`);
            });
        }
    });

    client.on('end', function () {
        console.log(`Disconnected from controller`);
    });

    client.on('close', function () {
        console.log(`Connection closed`);
    });

Теперь у меня также есть сервер rabbitmq, работающий на той же программе.Его работа заключается в том, чтобы слушать сообщения от клиентов.Каждое сообщение необходимо записать в сокет и дождаться ответа от сокета.Проблема в том, что мне нужно дождаться ответа и отправить его обратно в rabbitmq.Как я могу ждать ответа на сообщение?Кроме того, метод client.on ('data', ...) получает все сообщения.Я пытался реализовать что-то с помощью генератора событий, но безрезультатно ...

...