2012-07-16 39 views
10

我刚开始测试SignalR以监视应用程序。我有一个控制台,客户端可以拨打Hub。我注意到,每当客户端创建Connection.Hub.Start()时,它会在服务器中创建一个新的Hub实例,我需要随时刷新控件,因此我不希望它为每个控件创建新的Hub。为所有客户端创建相同的SignalR Hub

有没有办法为所有的客户端创建单个Hub,或者我失去了一些东西?

回答

18

为每个请求创建一个Hub实例,就像在WebForms中为每个请求创建一个ASP.NET Page实例,为ASP.NET MVC中的每个请求创建一个Controller或为每个请求创建一个WCF服务实例使用InstanceMode.PerCall时的服务请求。

如果要维护Hub请求/实例之间的共享状态,您需要使用静态字段或其他更高级的状态共享形式(例如依赖注入的单例)。

+0

谢谢,这很清楚。在每次调用中,服务器完成请求的工作并完成。但在这里我有一种情况,它必须持有客户端连接来推送他们的数据,否则SinalR如何维护所有连接的客户端,如果每个呼叫都有一个新的集线器。 – Wasim 2012-07-16 20:34:38

+0

集线器是一个抽象层,位于SignalR的低层连接方面之上,并以更简单的每个请求实例执行模型向您提出请求。如果你想在较低层工作,那么直接使用PersistentConnection类。集线器及其方法实际上是通过HubDispatcher(它是一个PersistentConnection子类)调用的。这是一个更加困难的层面,这就是为什么Hubs抽象存在的原因。 – 2012-07-16 21:11:15