基于非网络发起事件的信号通知

时间:2014-10-13 23:04:46

标签: asp.net-mvc signalr

我们的系统有两个服务器(S1),一个运行处理和数据存储(基本上是DB),另一个是Web服务器(WS)。

系统中可能会发生两种类型的情况:

  1. 用户A ping用户B.在这种情况下,我们检查用户B是否已登录,我们将通知推送到用户B客户端抛出SignalR。它有效。

  2. 服务在S1上不断运行,并生成集中多个用户的新数据。我的目标是,只要生成对用户A很重要的新数据,我就会立即向用户A客户端发送signalR通知,前提是他/她已登录。

  3. 这部分2对我来说不太清楚如何设计。我现在的想法是在webserve上启动一个无限期的进程来监视我们的DataBase并检查是否在这个用户之后生成了新记录,然后推送了SignalR消息。

    那没关系,但现在我们有10k用户登录,我认为正确的决定不会运行10k线程监控活动。

    基本上,我的问题是如何设计基于不是源自我们网络服务器的事件的基于signalR的通知机制。

2 个答案:

答案 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;

另外,这非常重要,每次依赖项触发时都必须重置事件处理程序,否则它将在第一次运行时再运行。

我希望这会对你有所帮助。