Node Red 有一个 UiBuilder,但我想使用 socket.io-client 从另一个应用程序收听它,无法建立连接

Node Red has a UiBuilder, but I want to listen to it from another app, using socket.io-client, fails to est connection

我的客户想要一个 OPs 工程师 运行 在 Node Red 一侧,但是所有操作支持人员都使用单页应用程序(并且永远不会接触 Node Red),所以一部分我在想示例 uibuilder 页面将创建一个套接字,但如果我有一个 angular 应用程序存在并且该套接字也存在,我可以获得我需要的所有数据无需破解代码。随着他们不断扩展用例,ui builder 正在从简单的屏幕组件切换到 1 个端点中的列表、表单、加载器等,带有层,大量内联 类 , 没有组织。

我有一个名为“launch”的 NodeRed 示例 UiBuilder,在处理某些示例时,它有一个我可以收听的套接字。我认为如果我可以创建一个不同的应用程序,它也可以侦听此套接字,那将会很有用。对于收到的每条消息,如果它不存在于列表中,它将把它添加到列表中,然后我们将从那里开始用户故事。

我想通过我创建的服务在 Angular 应用程序中实现套接字。我用网上找到的一些演示创建了一个简单的客户端-服务器关系,但我现在正在尝试 link 它到存在的 Node Red uibuilder 启动。

我认为它会像更新 url 或路径一样简单,但这似乎不起作用。

这是我正在使用的示例文件:

import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
import * as io from 'socket.io-client'
import { environment } from 'src/environments/environment';
import * as Rx from 'rxjs/Rx';
export class SocketioService {
  private _socket;
  constructor(){}
  setupSocketConnection(){ 
    this._socket = io.connect(environment.SOCKET_ENDPOINT);
    let observable = new Observable( observer => {
      this.socket.on('msg', (data:string) => {
        console.log("INFO DUMP", data);
        observer.next(data)
      })
      return () => { this.socket.disconnect(); }
    })
    
    let observer = {
      next: (data: Object) => {
        console.log("In Emit.")
        this.socket.emit('msg', JSON.stringify(data));
      }
    }
    return Rx.Subject.create(observer, observable);
  }
}

我的环境变量是:https://localhost:1800/uibuilder/vendor/socket.io/ 因为在查找对我创建的样本 /launch 的网络请求时,它看起来像是在引用这里。

这是我使用的演示。 https://tutorialedge.net/typescript/angular/angular-socket-io-tutorial/ 用 angular8.

创造一些东西

我还注意到的另一件事是智能感知似乎不喜欢我对以下行的实现:this._socket = io.connect(...); 说“无法在环境上下文中声明访问器。”具体来说:“属性 'connect' 在类型 'typeof import(.....node_modules/socket.io-client/build/index' 上不存在”

我在想我可能需要进行某种握手来验证套接字,但它似乎永远不会那么远。

个人经历:

我在这里的真正目的只是查看示例套接字控制台转储,因此没有真正的前端,只有默认的 Angular App 运行ning on :4200.

我认为该应用程序本身不会在 uibuilder 文件夹下运行,就像部署在其他地方并建立此连接一样。

您可以使用 uibuilder 创建 Angular SPA。

uibuilder 将扩展 Node-RED Web 服务来为您的 SPA 和您选择安装的任何其他前端库提供服务。

此外,它会在 Node-RED 和您的 SPA 之间创建一个 websocket 连接。

因此您不需要任何其他外部网络或网络套接字资源,uibuilder 会为您管理所有这些。


话虽如此,如果确实需要, 可以从不同的网络服务器 运行 uibuilder 前端应用程序。它没有经过特别好的测试,并且确实需要您手动添加一些配置。在这种情况下,uibuilder 仍会创建 websocket 连接并为您管理它。