2013-05-31 171 views
1

我有一個MVC的Web應用程序,它有一個上傳頁面上傳文件到服務器並處理文件。由於處理過程可能需要一些時間(10到30分鐘),因此我使用進度條顯示完成百分比。何時使用SignalR啓動和停止?

在這個頁面上我有下面的代碼初始化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

我不知道你爲什麼使用SignalR,這似乎有點矯枉過正。像plupload這樣的上傳器:http://www.plupload.com/具有構建它的進度功能,並且使用起來更容易。 – Steve

回答

1

啓動和停止SignalR連接可以採用多種方式。但是,我認爲立即啓動SignalR連接並且永遠不要停止它更爲常見。

就你的情況而言,根據「if」你希望在點擊/完成上傳之前/之後使用SignalR連接,你可能需要採取不同的方法。

如果您確實不會使用SignalR連接,除非用戶點擊上傳,您應該只在點擊上傳按鈕時啓動它。如果在上傳完成後您不使用SignalR連接,則必須將其停止。如果您不使用它,則無需保留服務器。

爲了解決一個稍微不同的問題(由@Steve提出):如果這個上傳文件是您在應用程序中使用SignalR的所有內容,那麼可能是矯枉過正。