何时使用SignalR的启动和停止?

时间:2013-05-31 09:49:36

标签: asp.net-mvc progress-bar signalr signalr.client

我有一个MVC Web应用程序,它有一个上传页面,可以将文件上传到服务器并处理文件。由于处理可能需要一些时间(10到30分钟),因此我使用进度条显示%完成。

在这个页面上,我有以下代码来初始化SignalR:

// Define functions to facilitate push from the server.
m_uploadHub = $.connection.importDataHub;

$.extend(m_uploadHub.client, {
    updateProgress: function (pct) {
        progressbar.progressbar("value", pct);
    },

    updateStatus: function (status) {
        $("#status").html(status);
    },

    updateProgressBarText: function (text) {
        progressLabel.text(text);
    },

    complete: function () {
        // no
    }
});

try {
    $.connection.hub.start().done(function () {
        // Set connection id to hidden field
        $('#SignalRConnectionId').val($.connection.hub.id);
    });
}
catch (e) {
    alert('SignalR hub start fail: ' + e);
}

这意味着当页面加载时,上面的javascript代码将运行,SignalR将启动并且永不停止。

此设计是否正确,或者我应该仅在用户点击上传按钮实际上传文件时才使用 $。connection.hub.start()? 当MVC操作返回时,我应该停止与 $。connection.hub.stop()的连接吗? (文件已成功上传或返回了一些错误/警告)

请建议。

1 个答案:

答案 0 :(得分:1)

可以通过多种方式利用SignalR连接的启动和停止。但是,我认为立即启动SignalR连接并且从不停止它更为常见。

在您的情况下,根据“if”您想要在点击/完成上传之前/之后使用SignalR连接,您可能需要采取不同的方法。

如果您真的不使用SignalR连接,除非用户点击上传,您应该只在单击上传按钮时启动它。如果您在上传完成后不使用SignalR连接,请务必停止。如果你没有使用它,就不需要让服务器占用它。

要解决一个稍微不同的问题(由@Steve提出):如果您在应用程序中使用SignalR,那么这可能是一种过度杀伤。