Signalr个人聊天

时间:2019-02-22 15:51:55

标签: signalr

我还是let character: Character = "F" let scalar = character.unicodeScalars.first! print(scalar.properties.numericType) // nil 的新手。我想使用signalr来创建聊天应用程序,并且个人聊天和群组遇到问题,因为每次用户重新连接时,连接ID总是会更改。

问题::我们如何知道哪个id用户引用了特定用户。如果连接ID始终更改。 (因为如果用户在浏览器中打开另一个选项卡,则signalR会将他们识别为另一个用户。我们如何知道该标识是同一个人)

signalR中是否有任何可以保存到数据库中的独特属性,以便在用户登录时可以识别用户?

2 个答案:

答案 0 :(得分:0)

SignalR正在执行每个连接/重新连接的操作。您的用户正在建立新的连接,因此他们将获得新的连接ID。

如果它们在将创建新连接的新选项卡中打开。您必须确定当前正在连接的用户以及要如何处理。

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

答案 1 :(得分:0)

您可以使用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