【发布时间】:2020-12-31 12:16:44
【问题描述】:
我正在创建一个嵌入到我的 asp.net mvc 4 项目中的聊天。我有一个在线用户 ul 列表,它在 OnConnected 上添加一个用户并在 OnDisconnected 上删除它。
所以,我的应用不是 SinglePage 应用,这意味着它一直在页面上刷新。
我在客户端处理此在线用户列表时遇到了一些困难,因为信号器在每次页面刷新时都会调用 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,则第二个用户将覆盖第一个用户的实例。
【问题讨论】:
-
你无法避免。导航到新页面是一个新的连接。用户可以有多个连接。
-
解决方法是大量使用 ajax。使用相同的布局页面,并使用ajax更新页面内容。新的私人聊天窗口、iframe 或其他应附加到正文,以免它们消失。
标签: asp.net-mvc asp.net-mvc-4 signalr