Signalr 信号服务器端,仅为1集线器调用OnDisconnect
我正在编写一个web应用程序,它使用信号器。在服务器c#上,我有两个集线器。 它确实需要是两个,否则我会合并它们并解决问题 我遇到的问题是,虽然我知道signer客户端 将共享一个连接。我遇到的问题是,当我关闭浏览器或在客户端上调用stop时。只有1个服务器端OnDisconnect(bool stopCalled)事件将触发 我不知怎的预料到,当客户端断开连接时,两者都会触发 我是不是很傻或者做错了什么? 任何信息都将不胜感激Signalr 信号服务器端,仅为1集线器调用OnDisconnect,signalr,signalr-hub,Signalr,Signalr Hub,我正在编写一个web应用程序,它使用信号器。在服务器c#上,我有两个集线器。 它确实需要是两个,否则我会合并它们并解决问题 我遇到的问题是,虽然我知道signer客户端 将共享一个连接。我遇到的问题是,当我关闭浏览器或在客户端上调用stop时。只有1个服务器端OnDisconnect(bool stopCalled)事件将触发 我不知怎的预料到,当客户端断开连接时,两者都会触发 我是不是很傻或者做错了什么? 任何信息都将不胜感激 Louis我认为您遇到的问题可能是由于您没有将任何事件处理程序(即
Louis我认为您遇到的问题可能是由于您没有将任何事件处理程序(即客户端集线器方法)连接到未触发OnDisconnected的集线器。如果这真的是原因,OnConnect也不应该在同一个集线器上触发 在其中一个“注释”中详细介绍了为什么会出现这种情况。以下是相关报价: 注意:通常在调用start方法建立连接之前注册事件处理程序。如果要在建立连接后注册某些事件处理程序,可以这样做,但必须在调用start方法之前注册至少一个事件处理程序。这样做的一个原因是,一个应用程序中可能有许多集线器,但如果您只想使用其中一个集线器,则不希望在每个集线器上触发OnConnect事件。当建立连接时,集线器代理上的客户端方法的存在会告诉SignalR触发OnConnected事件。如果在调用start方法之前未注册任何事件处理程序,则可以调用Hub上的方法,但不会调用Hub的OnConnected方法,也不会从服务器调用任何客户端方法 对OnConnected方法的每个引用都同样适用于OnDisconnected方法 在客户端上调用start()之前,可以向中心添加任意事件处理程序,以确保在该中心上调用OnConnected和OnDisconnected。事件处理程序是否永远不会被调用并不重要。例:
$.connection.myHub.client.thisWillNeverBeCalled = function () { };
$.connection.hub.start()//...
只要有第一行,就应该在
MyHub
上调用OnConnected和OnDisconnected。我认为您遇到的问题可能是由于您没有将任何事件处理程序(即客户端hub方法)连接到未触发OnDisconnected的hub。如果这真的是原因,OnConnect也不应该在同一个集线器上触发
在其中一个“注释”中详细介绍了为什么会出现这种情况。以下是相关报价:
注意:通常在调用start方法建立连接之前注册事件处理程序。如果要在建立连接后注册某些事件处理程序,可以这样做,但必须在调用start方法之前注册至少一个事件处理程序。这样做的一个原因是,一个应用程序中可能有许多集线器,但如果您只想使用其中一个集线器,则不希望在每个集线器上触发OnConnect事件。当建立连接时,集线器代理上的客户端方法的存在会告诉SignalR触发OnConnected事件。如果在调用start方法之前未注册任何事件处理程序,则可以调用Hub上的方法,但不会调用Hub的OnConnected方法,也不会从服务器调用任何客户端方法
对OnConnected方法的每个引用都同样适用于OnDisconnected方法
在客户端上调用start()之前,可以向中心添加任意事件处理程序,以确保在该中心上调用OnConnected和OnDisconnected。事件处理程序是否永远不会被调用并不重要。例:
$.connection.myHub.client.thisWillNeverBeCalled = function () { };
$.connection.hub.start()//...
只要有第一行,就应该在
MyHub
上调用OnConnected和OnDisconnected。我认为您遇到的问题可能是由于您没有将任何事件处理程序(即客户端hub方法)连接到未触发OnDisconnected的hub。如果这真的是原因,OnConnect也不应该在同一个集线器上触发
在其中一个“注释”中详细介绍了为什么会出现这种情况。以下是相关报价:
注意:通常在调用start方法建立连接之前注册事件处理程序。如果要在建立连接后注册某些事件处理程序,可以这样做,但必须在调用start方法之前注册至少一个事件处理程序。这样做的一个原因是,一个应用程序中可能有许多集线器,但如果您只想使用其中一个集线器,则不希望在每个集线器上触发OnConnect事件。当建立连接时,集线器代理上的客户端方法的存在会告诉SignalR触发OnConnected事件。如果在调用start方法之前未注册任何事件处理程序,则可以调用Hub上的方法,但不会调用Hub的OnConnected方法,也不会从服务器调用任何客户端方法
对OnConnected方法的每个引用都同样适用于OnDisconnected方法
在客户端上调用start()之前,可以向中心添加任意事件处理程序,以确保在该中心上调用OnConnected和OnDisconnected。事件处理程序是否永远不会被调用并不重要。例:
$.connection.myHub.client.thisWillNeverBeCalled = function () { };
$.connection.hub.start()//...
只要有第一行,就应该在
MyHub
上调用OnConnected和OnDisconnected。我认为您遇到的问题可能是由于您没有将任何事件处理程序(即客户端hub方法)连接到未触发OnDisconnected的hub。如果这真的是原因,OnConnect也不应该在同一个集线器上触发
进入