c# - SignalR 可以帮助这种情况 - 无需轮询即可检测计划完成情况吗?

标签 c# asp.net signalr

在我的网页(用asp.net mvc3编写)上,用户可以在ms sql数据库中创建计划,然后需要通知用户计划完成以及由此产生的一些数据。

为了检测计划完成情况(完成后其唯一 ID 将从表中消失),目前我正在执行 ajax 轮询,然后进行额外的 ajax 调用以从数据库获取结果数据。

可以使用 SignalR 改进这种情况吗?如果可以,如何改进?

最佳答案

Can this scenario be improved by using SignalR and if so, how?

确实可以改进。目前,我假设您正在进行 Ajax 轮询,但不知道何时真正需要刷新页面以显示计划完成的更新。通过 SignalR 实现,您将拥有一个使用集线器方法和客户端回调创建的服务器端集线器,以处理来自服务器集线器的回调。您不需要客户端轮询服务器来查看是否有任何更新。但是您需要在服务器(可能是 BG 工作人员)内部有一个轮询机制来检测计划完成情况(假设这是一个自动化事件)。 Signalr 不会自动执行这些操作,您需要从服务器发起到客户端中心订阅的调用。

就像您的场景的简单原型(prototype)一样,您可以在服务器上创建一个集线器,例如:-

ScheduleHub 可能有 2 个函数,例如 CreateScheduleSetScheduleCompletion 。 前提是 setScheduleCompletion 知道

在您的客户端 JavaScript 中,您将获得 hubConnection 实例

 var scheduleCheckHub= $.connection.scheduleHub;
//when the use
    $("#createSchedule").click(function () {
                    scheduleCheckHub.server.createSchedule(somedata);
                });

客户端集线器方法回调来处理来自服务器的回调。

scheduleCheckHub.client.updateScheduleStatus = function (data) {
              //do something
            };

您将拥有连接开始停止、重新连接逻辑等

 $.connection.hub.start().done(function () {
              //do something
            });
       .....

在您的服务器集线器 SetScheduleCompletion 方法中

    public void SetScheduleCompletion()
   {
 .....
//some code that knows when the schedule has been completed.
//Now i know that this schedule has been completed so
//push this to all the clients, ok then make the call back to the client hub proxy method
      Clients.All.updateScheduleStatus(responseObject); 
//No i just want to send this to only specific clients. Ok then do this
   var subscribers = Clients.Group(someIdentifierToGetGroups);
   subscribers.updateScheduleStatus(responseObject);
}

事情可能会根据应用程序的复杂性而发生变化。这是一个非常简单的场景和实现。

关于c# - SignalR 可以帮助这种情况 - 无需轮询即可检测计划完成情况吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16125751/

相关文章:

c# - 如何正确改进 ItemsControl 加载并避免卡顿

c# - 如何从 native (C++) 代码返回文本

asp.net - IIS URL 重写 : Add trailing slash except for . html 和 .aspx

asp.net - Asp.Net实时缓存和 session 的区别

asp.net - 网站重启时自动恢复/重新连接 SignalR 连接

javascript - 将 Typeahead 与 SignalR 结合使用

c# - 有什么方法可以将 SQL Server *data* 转换为 Entity Framework 对象以用于播种数据吗?

c# - 在 C# 中反序列化 XML 文件

ASP.NET HttpWebRequest 停止发送请求,CPU 使用率高

android - Azure 应用服务上的 SignalR 禁用了 ARR