Swift,如何在到后端 SignalR hub 的 Web 套接字连接中指定用户

Swift, how to specify user in web socket connection to back-end SignalR hub

我有一个 Swift iOS 应用程序正在连接到我的 MVC .net 核心后端应用程序。后端设置了 SignalR。


服务器上的我的中心 class:

public class ActivityHub : Hub
{
    public async Task SendMessage(string user, string message)
    {
        await Clients.All.SendAsync("ReceiveMessage", user, message);
    }

    public override async Task OnConnectedAsync()
    {
        await base.OnConnectedAsync();
    }

    public override Task OnDisconnectedAsync(Exception exception)
    {
        return base.OnDisconnectedAsync(exception);
    }
}

服务器上我的Startup.cs

app.UseEndpoints(endpoints =>
{
    endpoints.MapHub<ActivityHub>("/activityHub"); 
});

我在客户端启动连接

static var _socketConnection: URLSessionWebSocketTask?
static func connectToSocket(){
    let url = URL(string: "wss://mysite.net/activityHub")!
    _socketConnection = defaultSession.webSocketTask(with: url)
    
    _socketConnection?.resume()
}

当我在服务器端使用 Vanilla 网络套接字而不使用 SignalR 时,除了没有自动管理连接等外,一切正常,因此我需要转向使用 SignalR 来获取连接列表、用户、等等,开箱即用。

但是我不知道如何在发送套接字连接请求的过程中在客户端指定用户属性。我假设我需要指定的用户 属性 是保证对连接唯一的某种 ID?

我该怎么做?

目的是最终让服务器能够向特定用户的连接发送消息,其中包含有关特定事件的信息。


更新

SignalR has a ConnectionID property 建立的连接需要关联并映射到用户,这正是我所追求的。该资源来自 2014 年,因此可能有点陈旧。

此外,我认为最重要的是,Microsoft says By default, SignalR uses the ClaimTypes.NameIdentifier from the ClaimsPrincipal associated with the connection as the user identifier。所以我实际上可能不需要做任何映射,因为我正在使用身份框架。

务必为服务器和客户端使用 .NET SignalR 或 ASP.NET CORE SignalR。

您已更新为使用 ASP.NET CORE SignalR(服务器)和与 Core 一起使用的 SignalRClient-Swift 包。

很高兴听到它正在运行。