Signalr 在外部数据存储中管理连接的信号器
我们正在寻找一种方法,通过后台进程将消息推送到连接的客户端 我们正在采取的方法是,每当建立新连接(OnConnected)时,我们将connectionId单独存储在mongo db中,其中包含一些请求元数据(用于以后的过滤)。当事件发生时(从客户端或后端进程触发),workerrole(另一个后台进程)将侦听这些事件(通过消息传递或其他方式),然后根据事件详细信息,使用捕获的元数据过滤连接的客户端 这种方法似乎还可以,但我们遇到了一个问题Signalr 在外部数据存储中管理连接的信号器,signalr,signalr-hub,signalr.client,signalr-backplane,Signalr,Signalr Hub,Signalr.client,Signalr Backplane,我们正在寻找一种方法,通过后台进程将消息推送到连接的客户端 我们正在采取的方法是,每当建立新连接(OnConnected)时,我们将connectionId单独存储在mongo db中,其中包含一些请求元数据(用于以后的过滤)。当事件发生时(从客户端或后端进程触发),workerrole(另一个后台进程)将侦听这些事件(通过消息传递或其他方式),然后根据事件详细信息,使用捕获的元数据过滤连接的客户端 这种方法似乎还可以,但我们遇到了一个问题 信号服务器关闭 在服务器进行备份之前,客户端会断开连接
我认为更好的选择是使用IUserIdProvider或(单用户?)组,前提是您的过滤要求不太复杂。使用这两个选项中的任何一个都不必在数据库中存储ConnectionID。这些选项还使得向多个设备/选项卡发送消息变得相当容易,单个用户可以同时打开这些设备/选项卡。您可以在服务器的应用程序启动时这样做,它为任何打开的连接指定断开日期或任何标记。这也是一个很好的选项,与保存的元数据相匹配的新客户端连接使用组的一个问题是,它们不会持久化,因此,您基本上需要管理组和组中的连接—客户端应留在组中,直到在客户端上调用stop,或者客户端完全断开与服务器的连接(即,它已停止绑定到自动重新连接)。如果要使用组解决方案,您应该有一种方法始终将同一用户添加到OnConnected中的同一组,以防您必须手动重新启动客户端。