我有一个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()的连接吗? (文件已成功上传或返回了一些错误/警告)
请建议。
答案 0 :(得分:1)
可以通过多种方式利用SignalR连接的启动和停止。但是,我认为立即启动SignalR连接并且从不停止它更为常见。
在您的情况下,根据“if”您想要在点击/完成上传之前/之后使用SignalR连接,您可能需要采取不同的方法。
如果您真的不使用SignalR连接,除非用户点击上传,您应该只在单击上传按钮时启动它。如果您在上传完成后不使用SignalR连接,请务必停止。如果你没有使用它,就不需要让服务器占用它。
要解决一个稍微不同的问题(由@Steve提出):如果您在应用程序中使用SignalR,那么这可能是一种过度杀伤。