Как я уже писал, я не хотел настраивать систему обмена сообщениями, такую как RabbitMQ, просто для отправки простой команды на устройство через веб-сокет.Избыточное убийство!
После поиска я наконец-то нашел решение для нацеливания на правильный экземпляр.
1 \ Когда устройство открывает веб-сокет для сервера WebSocket, я сохраняю идентификатор приложения CF + идентификаторИндекс экземпляра CF в базе данных в виде «APP_ID: INSTANCE_INDEX».
Вы можете получить эту информацию с помощью этого кода в nodejs в CF env.vars:
const cfenv = require('cfenv');
let appID = cfenv.getAppEnv().app.application_id;
let instanceIndex = cfenv.getAppEnv().app.instance_index;
2 \ Когда пользователь запускает действие в Angular UI, которое будет вызывать REST-сервер, этот получает команду и получает «APP_ID: INSTANCE_INDEX» из БД для данного устройства.
3 \ Далее я открываю WebSocket с сервера REST по направлению к серверу WebSocket, ориентируясь именно на экземпляр, который содержит сокет, к которому подключено целевое устройство, добавляя этот заголовок HTTP: «X-CF-APP-INSTANCE ":" APP_ID: INSTANCE_INDEX ".
// Create WS
this._wsConnection = new WebSocket(this._serverURL, {
protocol: 'rest',
headers: { 'X-CF-APP-INSTANCE': 'APP_ID:INSTANCE_INDEX' }
});
4 \ Сервер WebSocket получает запрос от сервера REST и обрабатывает его с нужным устройством и возвращает результат на сервер REST, который вернет его.в угловой интерфейс.
Et вуаля!Проблема в разрешении!