Websocket синхронизирует двустороннее соединение - PullRequest
0 голосов
/ 21 мая 2018

enter image description here

Я вынужден использовать вышеуказанный поток данных.

Сервер node.js получает вызов для запуска команды подключенному клиентуна сервер node.js через websocket.

Нормальный поток заканчивается на клиенте после того, как браузер websocket браузера вызывает инструкцию для библиотеки javascript.

Es.
REST CALL -> KillAllHumans
NODEJS -> pass KillAllHumans to websocket;
BROWSER -> onmessage -> javascript_library.killAllHumans;

Требуется специальный метод REST ENDPOINTвернуть значение, сгенерированное библиотекой javascript, чтобы node.js оставался в ожидании до тех пор, пока клиент websocket не ответит.

Вопрос: возможно ли это?Это простой код веб-сокета в браузере.

echo_service = new WebSocket(websocketUrl,"echo-protocol"); 
    echo_service.onmessage = function(event)
    {
       var result = javascript_library.manageAction(event.data);
       console.log("killAllHumansResults: "+result);
       return result;
    }

Кажется, что оператор return не работает.

РЕДАКТИРОВАНИЕ:

это тело REST API, получившего REST CALL.wsServer - это класс объектов websocket.Посмотрите на результат вар.это ответ, возвращенный клиенту, который вызвал REST CALL (используя функцию обратного вызова).

var result = this._wsServer.sendMessage(<ip_client>,<parameters>);
 console.log("rest return: "+result);
 callback(error, result);
 return;

Для объекта Websocket im, использующего этот проект узла: https://www.npmjs.com/package/websocket

отправить сообщениеэто простой вызов connection.send(message);

Клиент получает сообщение правильно.«KillAllHumansResults» правильно печатается.К сожалению, "rest return:" не определено.

Очевидно, что печать запускается до завершения оставшегося потока.

1 Ответ

0 голосов
/ 24 мая 2018

После некоторых исследований я нашел обходной путь, используя библиотеку сна (npm install sleep).

this._wsServer.sendMessage(<ip_client>,<parameters>);
 sleep.sleep(5);
 var result = this._wsServer.getReceivedMessage(<ip_client>);
 callback(error, result);
 return;

Пять секунд достаточно, чтобы позволить клиенту отправить обратно данные, хранящиеся в wsServer.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...