gpt4 book ai didi

asp.net-mvc - SignalR 客户端在每次刷新页面时断开/连接。 ASP.NET MVC

转载 作者:行者123 更新时间:2023-12-01 23:26:02 25 4
gpt4 key购买 nike

我正在创建一个嵌入在我的 asp.net mvc 4 项目中的聊天。我有一个在线用户 ul 列表,它在 OnConnected 上添加用户并在 OnDisconnected 上删除用户。

所以,我的应用程序不是单页应用程序,这意味着它始终在页面上刷新。

我在客户端处理此在线用户列表时遇到一些困难,因为信​​号器在每次页面刷新时都会调用 OnDisconnected 和 OnConnected。

虽然其他客户端在应用程序中正常导航,但每次刷新页面时它都会被删除和添加。

如何避免客户端出现这种行为?

<小时/>

我正在尝试在运行带有 usersOnline 列表的页面的客户端上执行类似的操作...

var timeout;

chat.client.login = function (chatUser) {
addUser(chatUser);
window.clearTimeout(timeout);
};

chat.client.logout = function (chatUser) {
timeout = setTimeout(function () { removeUser(chatUser.Id); }, 3000);
};

但是我在处理多用户场景时遇到了困难...因为如果多个用户在超时之前执行集线器 onDisconnected,则第二个用户将覆盖第一个用户的实例。

最佳答案

确实没有真正的办法解决这个问题。客户端在离开页面时始终会断开连接,并在加载下一个页面时再次连接到 SignalR。

解决这个问题的唯一方法是创建 SPA,因此 SignalR 不需要通过导航来断开连接。

使用 SignalR 集线器的想法是允许以最少的编程或复杂性进行实时操作 - 最好的方法是 SignalR 从当前登录的用户列表中提取,而不是事件连接,因为这可能会导致同一用户多次。

因此,我建议,不要将 OnConnectedOnDisconnected 放在 AccountControllerLogIn 中> 和 LogOut 方法。例如:

public ActionResult LogIn()
{
//other stuff
var hub = GlobalHost.ConnectionManager.GetHubContext</*Hub Title*/>();
hub.client.chat.login()
}

public ActionResult LogOut()
{
// other stuff
var hub = GlobalHost.ConnectionManager.GetHubContext</*Hub Title*/>();
hub.client.chat.logout()
}

关于asp.net-mvc - SignalR 客户端在每次刷新页面时断开/连接。 ASP.NET MVC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15294497/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com