从 AngularJS 客户端到一个 SignalR 中心的多个连接

本文关键字:SignalR 连接 一个 客户端 AngularJS | 更新日期: 2023-09-27 18:33:42

我有一个AngularJS应用程序。假设我对不同的控制器有不同的观点。在每个控制器中,我想使用来自同一 SignalR 服务器中心的数据。

管理集线器连接的最佳做法是什么:

  • connection.start()在每个控制器。与同一个枢纽?
  • 我在初始化应用程序时打开一次与集线器的连接,然后然后我可以在控制器中使用这些连接。

当我不使用当前视图中的中心数据时,是否应该关闭连接,并在返回到视图时重新打开连接?或者即使我不是每次都使用所有连接,打开多个连接也没有问题?

从 AngularJS 客户端到一个 SignalR 中心的多个连接

根据 SignalR 的文档,它将使用相同的连接,因为它是同一个客户端。 但是,按照您描述的方式,在每个控制器上重新创建 connection.start 可能不是我建议的方式。

我实现了这样的东西:https://dzone.com/articles/better-way-using-aspnet

它有一个服务,并在每个控制器中使用 $scope.$parent.$on('',function(({}(。 这也允许您只观看您关心的每个控制器上的某些事件。并让服务监视所有内容,并将事件"发出"给关心的控制器。 在控制器的底部,你可以调用{signalrservicename}.intialize((,就像那篇文章所描述的那样。 与角度控制器共享"数据"的最有效和最佳方法是

1( 像本文描述的那样使用 $rootScope.$emit 以及服务一起使用或

2( 只需使用一个共享应用程序所有事件的服务,并且从不使用 $rootScope.$emit。这将要求你的服务对每个控制器有"广泛的知识",这有时是不切实际的。

如果使用 websocket 将数据从服务器发送到客户端,则应保持连接打开。

如果要限制从同一会话到服务器的连接数,可以从同一应用程序创建一个连接并将数据存储到$rootscope中,然后每个控制器可以监视全局变量并从中获取信息,如果他们正在侦听相同的变化。否则我认为有多个连接就可以了。