1

我有一个 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()的连接吗?(文件上传成功或返回一些错误/警告)

请指教。

4

1 回答 1

1

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

在您的情况下,取决于“是否”您想在单击/完成上传之前/之后使用 SignalR 连接,您可能需要采用不同的方法。

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

解决一个稍微不同的问题(由@Steve 提出):如果这个上传片段是您在应用程序中使用 SignalR 的全部内容,那么它可能是矫枉过正。

于 2013-05-31T18:01:34.850 回答