Я создал NodeJS приложение, которое реализует менеджер сокетов, например так:
import { Server } from "ws";
import clientObj from "../objects/clientObj";
import serverObj from "../objects/serverObj";
class socketMgr {
serverA = undefined;
serverB = undefined;
confA = undefined;
confB = undefined;
init(cA, cB) {
this.confA = cA;
this.confB = cB;
}
serve()
{
// server between devices and nodejs
if (this.confA.host && this.confA.port)
{
this.serverA = new Server({ host: this.confA.host, port: this.confA.port });
this.serverA.on("connection", connection => new clientObj(this.confA, conn));
}
// server between nodejs and gui
if (this.confB.host && this.confB.port)
{
this.serverB = new Server({ host: this.confB.host, port: this.confB.port });
this.serverB.on("connection", conn => new serverObj(this.confB, conn));
}
return true;
}
}
export default socketMgr;
Этот менеджер объявляет и инициализирует два сервера сокетов, которые отправляют и получают сообщения. Весь поток выглядит следующим образом (упрощено при подходе 1 к 1):
device (clients written in native C++ or other, no GUI) <==> NodeJS client/server <==> gui client (devices running Win, iOS or Unix based OS)
- устройство подключается к NodeJS и создает клиента (который реализует прослушиватели событий) на сервере A
- клиент на сервере A отвечает на запрос рукопожатия от устройства
- , когда рукопожатие прошло успешно, устройство начинает периодически отправлять сообщения на NodeJS (клиент на сервере A)
- NodeJS клиент обрабатывает сообщения и сохраняет некоторые состояния в БД (sql), а не целые сообщения, потому что это будет абсолютным перебором
TODO: После обработки сообщения на клиенте serverA, это сообщение должно быть как-то отправлено соответствующему клиенту gui (расположенному на другом порту).
Это забавная часть, где сервер web-сокетов встает на свои места. Я действительно не знаю, является ли это правильным подходом, но я хотел бы использовать экземпляр ServerB для перенаправления / трансляции на gui. Многие устройства (сотни или даже тысячи) в конечном итоге будут отправлять подобные сообщения, и многие пользователи могут просматривать эти сообщения со стороны gui (мониторинг).
Может перенаправлять / транслировать сообщения на gui будет достигнуто без экземпляра serverB? Как можно добиться такого типа перенаправления / трансляции сообщений в NodeJS?
РЕДАКТИРОВАТЬ: Эта проблема много сложнее, чем показала моя первая оценка. Устройства должны взаимодействовать через два сервера веб-сокетов, а соединения должны управляться отдельно, потому что эти устройства с обеих сторон не равны в любом случае. Маршрутизация между ними должна обрабатываться программно.
Если я могу предоставить какую-либо дополнительную информацию. по этому вопросу, пожалуйста, дайте мне знать.
Спасибо за внимание к этому.
С наилучшими пожеланиями.