我们的系统有两个服务器(S1),一个运行处理和数据存储(基本上是DB),另一个是Web服务器(WS)。
系统中可能会发生两种类型的情况:
用户A ping用户B.在这种情况下,我们检查用户B是否已登录,我们将通知推送到用户B客户端抛出SignalR。它有效。
服务在S1上不断运行,并生成集中多个用户的新数据。我的目标是,只要生成对用户A很重要的新数据,我就会立即向用户A客户端发送signalR通知,前提是他/她已登录。
这部分2对我来说不太清楚如何设计。我现在的想法是在webserve上启动一个无限期的进程来监视我们的DataBase并检查是否在这个用户之后生成了新记录,然后推送了SignalR消息。
那没关系,但现在我们有10k用户登录,我认为正确的决定不会运行10k线程监控活动。
基本上,我的问题是如何设计基于不是源自我们网络服务器的事件的基于signalR的通知机制。
答案 0 :(得分:0)
我会使用服务总线或mq,例如这个Free MQ https://www.rabbitmq.com/
您可以使用此代理库(我是作者)将消息直接代理到客户端。
Doc {#3}}
演示https://github.com/AndersMalmgren/SignalR.EventAggregatorProxy/wiki
答案 1 :(得分:0)
您还可以设置一个sql依赖项,以便向您的信号器客户端发送消息,
http://techbrij.com/database-change-notifications-asp-net-signalr-sqldependency
此链接是我基于我的代码的链接。
要注意的几件事,表的设置。您不能使用3部分表名
"SELECT [CMRID],
[SolutionID],
[CreateDT],
[ModifyDT]
**FROM [dbo].[Case]**
WHERE [ModifyDT] > " + LastExecutionDateTime;
另外,这非常重要,每次依赖项触发时都必须重置事件处理程序,否则它将在第一次运行时再运行。
我希望这会对你有所帮助。