Signalr 个人聊天

Signalr Personal Chat

我对 signalr 还是个新手。我想用 signalR 制作聊天应用程序,但个人聊天和群组有问题,因为连接 ID 总是在用户每次重新连接时发生变化。

问题:我们如何知道哪个id用户是引用特定用户。如果连接 ID 总是变化。 (因为如果用户在他们的浏览器中打开另一个选项卡,signalR 会将他们识别为另一个用户。我们怎么知道这个 id 是同一个人)

是否有任何来自 signalR 的唯一 属性 我们可以保存在数据库中以便当用户登录时可以识别用户?

SignalR 正在对每个 connect/reconnect 做它应该做的事情。您的用户正在建立新的连接,因此他们会获得一个新的连接 ID。

如果他们在将创建新连接的新选项卡中打开。您必须弄清楚当前正在连接的用户以及您希望如何处理。

如果您看一下 docs,您会发现他们有将用户映射到连接的示例。

您可以使用 UserNames 的登录用户。根据您使用的技术,您可以使用不同的方法。我在 MVC 中的做法如下:
中心:

 public class ChatHub :Hub
    {
        public void SendMessage(string sender,string receiver, string msg)
        {
            MessageService messageService = new MessageService();
            long msgId = messageService.Add(sender, receiver, msg);
            Clients.User(receiver).receiveMessage(sender, msg, msgId);
            Clients.User(sender).receiveMessage(sender, msg, msgId);
        }
    }

查看:

   $('#send').click(function () {
        hub.invoke("SendMessage", "@User.Identity.Name", "@ViewBag.Receiver", $('#message').val());
    });

发件人UserName可以通过@User.Identity.Name获取(在MVC中),收件人UserName可以在发件人打开收件人聊天时读取。

更新:
关于 Asp.Net Web 表单,检查以下内容是否有帮助:
SignalR-with-ASP-NET-One-to-one-and-Group-Chat