0

我决定在我的页面上使用 SignalR 进行聊天。当用户单击放置在 _Layout.cshtml 中的“进入聊天”链接时,会打开聊天页面。这工作正常。但是,我想要实现的是以下功能:

  • 在页面的左侧,我希望有某种“在线用户”区域,当一个用户登录时,其他已经登录的用户将能够看到一个新用户刚刚进入该页面。
  • 在线用户只需点击他们的名字就可以互相聊天

我正在使用以下代码连接到聊天应用程序:

$(function () {
            //declare a proxy to reference the hub
            var chatHub = $.connection.chatHub;
            registerClientMethods(chatHub);
            //Start Hub
            $.connection.hub.start().done(function () {
                registerEvents(chatHub);
                chatHub.server.connect(@User.Identity.Name);


            });
        });

但是,当我将此代码放在我的 _Layout.cshtml 页面中时,用户每次浏览页面时都会永久注销并再次连接(它们打算在 _Layout.cshtml 中打开)。浏览页面时有什么方法可以保持与集线器的连接?使用此类功能时的最佳实践是什么?

4

1 回答 1

3

每当您离开页面或以任何方式刷新页面内容时,您都需要启动新的 SignalR 连接。浏览页面时有两种方法可以处理此行为:

  1. 创建单页应用程序。
  2. 处理用户在服务器上连接/断开连接的方式,使他们在离开站点之前不会真正注销。

现在深入了解#2 的更多细节。您网站上的用户可能会在每次转换到新页面时断开/连接,但您可以通过服务器端逻辑控制他们注销或显示断开连接的方式。您可以通过在服务器端代码中保留一组“在线”用户,然后仅在指定的超时值后才考虑他们离线来获得此功能。

于 2013-05-17T21:54:30.400 回答