signalr避免在加载客户端重复登录

时间:2015-05-01 09:13:28

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

我正在使用signalR推送服务。

我创建了一个局部视图。内部局部视图。这是我的客户端代码:

    <script type="text/javascript">
            var objHub;
            $(function () {
                objHub = $.connection.AnilHub;

                loadClientMethods(objHub);

                $.connection.hub.start()
                    .done(function () { objHub.server.connect();
 console.log('Now connected, connection ID=' + $.connection.hub.id); }
// at the same time i want to insert into database to set user is online.

objHub.server.login('user1');
)
                    .fail(function () { console.log('Could not Connect!'); });


            function loadClientMethods(objHub) {

                objHub.client.getMessages = function (message) {
                    $('#divMessage').append('<div><p>' + message + '</p></div>');

                    var height = $('#divMessage')[0].scrollHeight;
                    $('#divMessage').scrollTop(height);
                }
            }
        </script>

中心代码

[HubName("MyHub")]
    public class MainHub : Hub
    {
 public void Connect()
        {
            try
            {
                string userGroup = "test";

                var id = Context.ConnectionId;

                Groups.Add(id, userGroup);

                Clients.Caller.onConnected(id, userGroup);
            }
            catch
            {
                Clients.Caller.NoExistAdmin();
            }
        }
 public void NotifyAllClients(string Message)
        {
            Clients.Group("test").getMessages(Message);
        }
public override Task OnConnected()
        {
            // Set status online on database

            return base.OnConnected();
        }

        public override Task OnDisconnected(bool stopCalled = false)
        {
            // set status disconnct in database
            return base.OnDisconnected(stopCalled);
        }
}
}

现在我只想避免重新加载登录检查。因为每次刷新页面时,它都会调用connect方法并调用hub方法。如何避免重新连接问题。我如何坚持这些东西,甚至枢纽也不会处理会议。

请建议......

1 个答案:

答案 0 :(得分:0)

在你的html中,在第一次加载时,创建一个随机id并将其存储在cookie中。

在您的集线器代码中,创建一个arraylist并使用相应的连接ID存储这些随机ID。

在你的html中,尝试在每次刷新页面时读取cookie中的随机ID,如果找不到它,则为新连接,如果找到,则使用带有新连接ID的旧随机ID连接到您的集线器。然后在您的hub arraylist中,对于此特定随机ID,请使用新连接ID替换旧连接ID。