Socket-IO动态初始化

卡布拉

问题陈述

在Angular应用程序上实现socket.io之后,我很好奇要了解是否可以在客户端(FrontEnd)app.module文件中动态设置“ SocketIoModule”。

我想按照npm软件包的说明从服务器(后端)配置文件中加载URL和端口

import { SocketIoModule, SocketIoConfig } from 'ngx-socket-io';
import { SocketService } from './services/socket.service';
const socketConfig: SocketIoConfig = { url: 'http://localhost:3000', options: {} };

@NgModule({

[..]

imports: [
    BrowserModule,
    SocketIoModule.forRoot(socketConfig)
  ],
providers: [
  // all other providers
  <SocketProvider>
]

[..]

//package.json

   "ngx-socket-io": "^2.1.1",
   "socket.io": "^2.2.0",
   "socket.io-client": "^2.2.0"

所需的最终状态

//backend config service
let url = config.env.url.base + config.env.url.socketIoPort;
const socketConfig: SocketIoConfig = { url: url, options: {} };

附带说明一下,主要挑战是,在加载客户端时,UI无法访问服务器端(Angular安全)。

我还读到,实现此目标的最佳方法是使用“环境”文件[Dev,Staging,Prod]。

最后说明:整个过程的重点是拥有一个集中的文件,以具有所有配置并使其易于维护。

jfriend00

为了使客户端能够从服务器动态获取socket.io配置信息,您必须在客户端正<script>在运行的HTML文件的HTML文件标记中的Javascript变量中包含配置信息,或者必须具有一个客户端可以发送Ajax调用以请求socket.io配置信息。

第一个可能是服务器端模板系统的一部分,该系统包含一个脚本标签,该脚本标签定义站点上每个页面中包含socket.io配置信息的Javascript对象,因此socket.io配置信息始终可用。该服务器端模板系统可以从服务器中的一个中心位置获取数据。

第二个可能只是在已知URL上设置Ajax可到达路由,客户端可以根据需要获取配置信息。这可能比第一种选择要慢,因为它涉及到服务器的单独往返,但是对网站体系结构的影响可能较小,因为它不必影响网站上HTML文件的生成,而只是Javascript与您的socket.io初始化代码一起使用。在服务器上,这只是添加的另一条途径,与其他所有事物无关。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章