Asp.net mvc 4 未连接的信号器多次呼叫
我有一个asp.NETMVC4应用程序,它使用信号器 当一个用户连接时,我想通知所有人(暂时发送到“all”只是为了测试它)。在我的中心课程中,我有:Asp.net mvc 4 未连接的信号器多次呼叫,asp.net-mvc-4,signalr,signalr-hub,Asp.net Mvc 4,Signalr,Signalr Hub,我有一个asp.NETMVC4应用程序,它使用信号器 当一个用户连接时,我想通知所有人(暂时发送到“all”只是为了测试它)。在我的中心课程中,我有: public override System.Threading.Tasks.Task OnConnected() { NotifyAllOfUserLogin(); return base.OnConnected(); } <script type="text/j
public override System.Threading.Tasks.Task OnConnected()
{
NotifyAllOfUserLogin();
return base.OnConnected();
}
<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>
在_layout.cshtml中,我有以下内容:
public override System.Threading.Tasks.Task OnConnected()
{
NotifyAllOfUserLogin();
return base.OnConnected();
}
<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>
$(文档).ready(函数(){
var proxy=$.connection.messagehub;
proxy.client.messageAll=函数(消息){
$(“#消息”).prepend(“'+消息+”
”);
};
$(“#btnSubmitMessage”)。单击(函数(){
proxy.server.messageAll($(“#txtMessage”).val();
$(“#txtMessage”).val(“”);
});
$.connection.hub.start();
});
虽然这是可行的,但我认为在母版页中编写这是一个错误,因为对于继承母版的每个页面,都会重新初始化集线器连接,因此会多次调用OnConnected
我应该如何正确处理这个问题,仅当用户登录到应用程序时调用OnConnect,当用户注销时调用onDisconnected?对于每个页面加载,都会建立一个新的连接。当该页关闭时,该特定连接也会关闭
您需要做的是在服务器端跟踪用户的连接ID。您需要跟踪与每个特定用户帐户相关的活动连接,以及它们断开连接的时间。这样,如果没有预先存在的与该用户相关的活动连接ID,则可以通知所有用户该用户已连接。对于每次页面加载,都会建立新连接。当该页关闭时,该特定连接也会关闭
您需要做的是在服务器端跟踪用户的连接ID。您需要跟踪与每个特定用户帐户相关的活动连接,以及它们断开连接的时间。这样做,如果没有预先存在的与该用户相关的活动连接ID,则可以通知所有用户该用户已连接。因此,实际上可以使用$.connection.hub.start();在母版页中调用,因为所有操作都是通过连接ID进行的?谢谢,这开始有意义了。是的,完全没问题。如何处理与信号集线器的连接完全取决于您。请记住,应用程序中的每个页面都会导致打开/关闭页面上的连接/断开连接。我还注意到每个页面上的连接/断开连接-显然,因为我在母版页中完成了所有这些操作,但如果您的意思是我不必担心,因为这不是问题,那么好的,您是如何解决问题的?在我的例子中,我收到了多个通知,因为最后一页的最后一个连接仍然处于活动状态,需要一段时间才能断开连接,所以实际上可以使用$.connection.hub.start();在母版页中调用,因为所有操作都是通过连接ID进行的?谢谢,这开始有意义了。是的,完全没问题。如何处理与信号集线器的连接完全取决于您。请记住,应用程序中的每个页面都会导致打开/关闭页面上的连接/断开连接。我还注意到每个页面上的连接/断开连接-显然,因为我在母版页中完成了所有这些操作,但如果您的意思是我不必担心,因为这不是问题,那么好的,您是如何解决问题的?在我的例子中,我收到多个通知,因为最后一页的最后一个连接仍然处于活动状态,需要一段时间才能断开