_Layout.cshtml中的SignalR - 持久连接

时间:2013-05-17 12:06:51

标签: asp.net-mvc-4 signalr signalr-hub

我决定在我的页面上使用SignalR进行聊天。当用户点击位于_Layout.cshtml内的“Enter Chat”链接时,将打开聊天页面。这很好用。但是,我想要实现的是以下功能:

  • 在页面的左侧,我希望有一些 “在线用户”区域和当一个用户登录时,其他用户是谁 已登录将能够看到新用户刚进入 页。
  • 在线用户可以简单地互相聊天 点击他们的名字

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

$(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中打开)。 在浏览页面时是否有任何方法可以与集线器保持连接?使用此类功能时的最佳做法是什么?

1 个答案:

答案 0 :(得分:3)

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

  1. 创建单页应用程序。
  2. 处理在服务器上连接/断开连接的用户,使他们在离开网站之前不会真正注销。
  3. 现在深入了解#2的更多细节。您的站点上的用户可能会在每次转换到新页面时断开/连接,但您可以通过服务器端逻辑控制他们注销或断开连接的方式。您可以通过在服务器端代码中保留一组“在线”用户,然后仅在指定的超时值后离线考虑它们来获得此功能。