我对使用 SignalR 决定使用集线器进行连接的规则感到困惑。
在javascript中,如果我写$.connection.hub.start()
,并说我有两个集线器(hub1和hub2),那么哪个集线器连接?或者它们都是连接的?
答案 0 :(得分:0)
两者都将连接。如果您查看文档:{{3}}
- 您可以在应用程序中定义多个Hub类。执行此操作时,将共享连接,但组是分开的:
所有客户端都将使用相同的URL与您的服务建立SignalR连接(“/ signalr”或您指定的自定义URL),并且该连接用于该服务定义的所有集线器。
与在单个类中定义所有Hub功能相比,多个Hub没有性能差异。
- 所有集线器都获得相同的HTTP请求信息。
由于所有集线器共享相同的连接,因此服务器获取的唯一HTTP请求信息是建立SignalR连接的原始HTTP请求中的内容。如果使用连接请求通过指定查询字符串将信息从客户端传递到服务器,则无法向不同的集线器提供不同的查询字符串。所有中心都将收到相同的信息。
答案 1 :(得分:0)
我从客户端js指南中找到了以下内容。 "在Hub的代理上存在客户端方法是告诉SignalR触发OnConnected事件"
注意:通常在调用start方法建立连接之前注册事件处理程序。如果要在建立连接后注册一些事件处理程序,则可以执行此操作,但在调用start方法之前必须至少注册一个事件处理程序。这样做的一个原因是应用程序中可能有许多集线器,但如果您只打算使用其中一个集线器,则不希望在每个集线器上触发OnConnected事件。建立连接后,Hub代理上存在客户端方法会告诉SignalR触发OnConnected事件。如果在调用start方法之前没有注册任何事件处理程序,您将能够在Hub上调用方法,但Hub的OnConnected方法不会被调用,并且不会有客户端方法从服务器调用。