NodeJS WebSockets направляет сообщения с устройств на Angular gui - NodeJS - PullRequest
0 голосов
/ 03 апреля 2020

Я создал 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)
  1. устройство подключается к NodeJS и создает клиента (который реализует прослушиватели событий) на сервере A
  2. клиент на сервере A отвечает на запрос рукопожатия от устройства
  3. , когда рукопожатие прошло успешно, устройство начинает периодически отправлять сообщения на NodeJS (клиент на сервере A)
  4. NodeJS клиент обрабатывает сообщения и сохраняет некоторые состояния в БД (sql), а не целые сообщения, потому что это будет абсолютным перебором

TODO: После обработки сообщения на клиенте serverA, это сообщение должно быть как-то отправлено соответствующему клиенту gui (расположенному на другом порту).

Это забавная часть, где сервер web-сокетов встает на свои места. Я действительно не знаю, является ли это правильным подходом, но я хотел бы использовать экземпляр ServerB для перенаправления / трансляции на gui. Многие устройства (сотни или даже тысячи) в конечном итоге будут отправлять подобные сообщения, и многие пользователи могут просматривать эти сообщения со стороны gui (мониторинг).

Может перенаправлять / транслировать сообщения на gui будет достигнуто без экземпляра serverB? Как можно добиться такого типа перенаправления / трансляции сообщений в NodeJS?

РЕДАКТИРОВАТЬ: Эта проблема много сложнее, чем показала моя первая оценка. Устройства должны взаимодействовать через два сервера веб-сокетов, а соединения должны управляться отдельно, потому что эти устройства с обеих сторон не равны в любом случае. Маршрутизация между ними должна обрабатываться программно.

Если я могу предоставить какую-либо дополнительную информацию. по этому вопросу, пожалуйста, дайте мне знать.

Спасибо за внимание к этому.

С наилучшими пожеланиями.

1 Ответ

0 голосов
/ 03 апреля 2020

Вам не нужно создавать два сервера для этого. Устройство и GUI оба являются клиентом. Когда устройство отправляет данные на сервер, вы можете отправить эти данные на GUI, разрешив подписку GUI клиента на сообщения устройства, по имени topi c или по идентификатору устройства.

...