Asp.net mvc 4 信号器内部_Layout.cshtml-持久连接

Asp.net mvc 4 信号器内部_Layout.cshtml-持久连接,asp.net-mvc-4,signalr,signalr-hub,Asp.net Mvc 4,Signalr,Signalr Hub,我决定用信号器在我的页面上聊天。当用户单击位于_Layout.cshtml内的“输入聊天”链接时,聊天页面将打开。这个很好用。但是,我希望实现以下功能: 在这页的左边,我想要一些 “在线用户”区域,当一个用户登录时,其他用户 已经登录的用户将能够看到新用户刚刚进入 页面 在线用户可以通过简单的方式彼此聊天 点击他们的名字 我正在使用以下代码连接聊天应用程序: $(function () { //declare a proxy to reference the hub

我决定用信号器在我的页面上聊天。当用户单击位于_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中打开)。
在浏览页面时,是否有任何方法可以保持与中心的连接?使用此类功能的最佳做法是什么?

无论何时离开页面或以任何方式刷新页面内容,都需要启动新的信号器连接。在页面中导航时,有两种方法可以处理此行为:

  • 创建一个单页应用程序
  • 处理用户在服务器上的连接/断开连接时,应确保用户在离开站点之前不会真正注销

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

    无论何时离开页面或以任何方式刷新页面内容,您都需要启动新的信号器连接。在页面中导航时,有两种方法可以处理此行为:

  • 创建一个单页应用程序
  • 处理用户在服务器上的连接/断开连接时,应确保用户在离开站点之前不会真正注销

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

    好的,我理解,但如何在服务器端代码中保留“在线”用户?e、 通过制作一个简单的在线用户列表,这绝对是一个有效的方法。是的,泰勒·马伦——我设法找到了在线用户。现在我想做的是打开一个新的页面与私人聊天。这个很好用。但是,当user1开始聊天时,是否有任何方法可以通知user2(例如,将为user2打开一个包含私人聊天的窗口)。当这个窗口打开时,我不想再次通知user2。当然,这只是服务器端的逻辑,并在正确的时间触发正确的服务器功能,但我想知道我应该怎么做?例如:如果user2想要与user1聊天,则显示带有信息的div?我知道我应该触发正确的服务器功能,但是如何从服务器触发客户端功能?好的,我知道,但是我如何在服务器端代码中保持“在线”用户?e、 通过制作一个简单的在线用户列表,这绝对是一个有效的方法。是的,泰勒·马伦——我设法找到了在线用户。现在我想做的是打开一个新的页面与私人聊天。这个很好用。但是,当user1开始聊天时,是否有任何方法可以通知user2(例如,将为user2打开一个包含私人聊天的窗口)。当这个窗口打开时,我不想再次通知user2。当然,这只是服务器端的逻辑,并在正确的时间触发正确的服务器功能,但我想知道我应该怎么做?例如:如果user2想要与user1聊天,则显示带有信息的div?我知道我应该触发正确的服务器功能,但是如何从服务器触发客户端功能呢?