【问题标题】:How do I poll a database on the background and notify with SignalR from the server?如何在后台轮询数据库并从服务器使用 SignalR 通知?
【发布时间】:2016-08-09 20:23:51
【问题描述】:

我目前正在使用 SignalR 开发一个实时聊天应用程序。实时聊天应用的工作原理如下:

  1. 注册用户只能与管理员交谈。那里 可以同时连接任意数量的管理员。
  2. 每位管理员都可以随时与任何注册用户(即使是离线用户)交谈。
  3. 聊天应用程序的用户端和管理员端位于两个不同的 ASP.NET MVC 应用程序中,共享同一个数据库。 (这是用户要求)
  4. 所有消息在发送后立即存储在数据库中。

目前,我有两个应用程序调用 SignalR 服务器函数,该函数使用 setInterval() 从数据库中获取数据来更新客户端,但这违背了使用 SignalR 的全部意义。有没有办法在服务器端使用后台任务轮询数据库,然后使用 SignalR 通知特定用户(接收消息的用户)?如果是,我该如何设置后台任务?

【问题讨论】:

  • tbh,这种设计超越了实时聊天的全部目的,它让您的应用程序更加复杂而没有任何收获
  • 你的数据库是什么?如果是 MSSQL,那么你需要 SQL Dependency

标签: asp.net-mvc-4 signalr


【解决方案1】:

看起来您想要一个自下而上的通知机制(数据库-应用程序-客户端)。正如@JAGcorrecty 建议的那样,您可以使用ADO.Net 工具集中的SqlDependency,它可以让您在消息表上放置一个wach,以便在它发生更改时通知您(例如,插入一条消息)。这是fine example。 SqlDependency 不会为您提供插入/更改的实际记录 - 它只会让您知道发生了更改,因此您需要设计一个查询来获取该确切记录。收到通知后,您可以查询该记录,然后从您的集线器调用客户端的方法并将记录作为参数传递。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-21
    • 1970-01-01
    • 2021-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-11
    • 2022-01-03
    相关资源
    最近更新 更多