我还是let character: Character = "F"
let scalar = character.unicodeScalars.first!
print(scalar.properties.numericType) // nil
的新手。我想使用signalr
来创建聊天应用程序,并且个人聊天和群组遇到问题,因为每次用户重新连接时,连接ID总是会更改。
问题::我们如何知道哪个id用户引用了特定用户。如果连接ID始终更改。 (因为如果用户在浏览器中打开另一个选项卡,则signalR会将他们识别为另一个用户。我们如何知道该标识是同一个人)
signalR
中是否有任何可以保存到数据库中的独特属性,以便在用户登录时可以识别用户?
答案 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