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 8
- 包:
- rxjs
- rsjx-compat
- socket.io
- socket.io-客户端
- @types/socket.io-client
我在这里的真正目的只是查看示例套接字控制台转储,因此没有真正的前端,只有默认的 Angular App 运行ning on :4200.
我认为该应用程序本身不会在 uibuilder 文件夹下运行,就像部署在其他地方并建立此连接一样。
您可以使用 uibuilder 创建 Angular SPA。
uibuilder 将扩展 Node-RED Web 服务来为您的 SPA 和您选择安装的任何其他前端库提供服务。
此外,它会在 Node-RED 和您的 SPA 之间创建一个 websocket 连接。
因此您不需要任何其他外部网络或网络套接字资源,uibuilder 会为您管理所有这些。
话虽如此,如果确实需要, 可以从不同的网络服务器 运行 uibuilder 前端应用程序。它没有经过特别好的测试,并且确实需要您手动添加一些配置。在这种情况下,uibuilder 仍会创建 websocket 连接并为您管理它。
我的客户想要一个 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 8
- 包:
- rxjs
- rsjx-compat
- socket.io
- socket.io-客户端
- @types/socket.io-client
我在这里的真正目的只是查看示例套接字控制台转储,因此没有真正的前端,只有默认的 Angular App 运行ning on :4200.
我认为该应用程序本身不会在 uibuilder 文件夹下运行,就像部署在其他地方并建立此连接一样。
您可以使用 uibuilder 创建 Angular SPA。
uibuilder 将扩展 Node-RED Web 服务来为您的 SPA 和您选择安装的任何其他前端库提供服务。
此外,它会在 Node-RED 和您的 SPA 之间创建一个 websocket 连接。
因此您不需要任何其他外部网络或网络套接字资源,uibuilder 会为您管理所有这些。
话虽如此,如果确实需要, 可以从不同的网络服务器 运行 uibuilder 前端应用程序。它没有经过特别好的测试,并且确实需要您手动添加一些配置。在这种情况下,uibuilder 仍会创建 websocket 连接并为您管理它。