我有一个使用 SignalR 的 asp.net mvc 4 应用程序。
当用户连接时,我想通知所有人(暂时发送给“所有人”以进行测试)。在我的 Hub 类中,我有这个:
public override System.Threading.Tasks.Task OnConnected()
{
NotifyAllOfUserLogin();
return base.OnConnected();
}
在 _layout.cshtml 中,我有这个:
<script type="text/javascript">
$(document).ready(function () {
var proxy = $.connection.messagehub;
proxy.client.messageAll = function (message) {
$('#messages').prepend('<p style=\'white-space:pre;\'>' + message + '</p><br />');
};
$("#btnSubmitMessage").click(function () {
proxy.server.messageAll($("#txtMessage").val());
$("#txtMessage").val('');
});
$.connection.hub.start();
});
</script>
虽然这可行,但我认为在母版页中编写它是一个错误,因为集线器连接将为每个继承母版的页面重新初始化,因此 OnConnected 将被调用很多次。
我应该如何正确处理这个问题,仅在用户登录应用程序时调用 OnConnect,在用户注销时调用 onDisconnected?