从AngularJS客户端到一个SignalR集线器的多个连接

时间:2016-02-07 09:43:31

标签: c# angularjs websocket signalr

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

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

  • 我在每个中心开始一个新的连接(connection.start()) 控制器。有多个连接是否有任何问题 同一个枢纽?
  • 我将应用程序初始化后打开与集线器的连接 然后我可以在控制器中使用这些连接。

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

2 个答案:

答案 0 :(得分:1)

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

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

有一个服务,并使用$ scope。$ parent。$ on('',function(){});在每个控制器中。这也允许您只在您关心的每个控制器上观看某些事件。让服务观察一切,并将事件“发出”给关心的控制器。在控制器的底部,你可以像那篇文章所描述的那样调用{signalrservicename} .intialize()。

是与角度控制器共享“数据”的最有效和最佳方式

1)使用$ rootScope。$ emit这样的文章描述了一个服务 或者

2)只使用一个共享应用程序所有事件的服务,而不使用$ rootScope。$ emit。这将要求您的服务对每个控制器都有“广泛的知识”,这有时候是不切实际的。

答案 1 :(得分:0)

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

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