如何在 SignalR 中显示用户的实时位置?

How to Show Live Location of User in SignalR?

我正在为客户构建用户位置跟踪应用程序。

我正在使用 SignalR Hub 方法通过客户端 (Android) 获取位置并保存在 MongoDb

我的代码

public async Task UpdateLocation(double latitude, double longitude)
{
    await _mediator.Send(new UpdateLocationRequestModel()
    {
        Latitude = latitude,
        Longitude = longitude,
        UserId = Context.User.GetUserId()
    });
}

现在我想要另一个客户端(Web)实时查看特定用户的更新。

我该怎么做?

我的理论解

我正在考虑在 Hub 中创建一个方法,因为当客户端(Web)按下一个按钮时,将调用一个方法

public async Task ShowUser(string userId)
{
    //Add To Redis Cache ('track',userId)         
}

public async Task UpdateLocation(double latitude, double longitude)
{
    await _mediator.Send(new UpdateLocationRequestModel()
    {
        Latitude = latitude,
        Longitude = longitude,
        UserId = Context.User.GetUserId()
    });
    // Check Redis Cahce for 'track'
    // Send Data to Client(Web)
}

我还没有测试过这个但是有更好的方法吗?

如果您只使用 SignalR

不使用 Redis 的理论方法就是这样。假设您一次只想跟踪一个用户

public async AddToTrackGroup(string userId) {
        return Groups.Add(Context.ConnectionId, "track-" + userId);
}

public async RemoveFromTrackGroup(string userId) {
        return Groups.Remove(Context.ConnectionId, "track-" + userId);
}

public async Task UpdateLocation(double latitude, double longitude)
{
    await _mediator.Send(new UpdateLocationRequestModel()
    {
        Latitude = latitude,
        Longitude = longitude,
        UserId = Context.User.GetUserId()
    });
    Clients.Group("track-" + Context.User.GetUserId()).updateLocation(latitude,longitude);
}

理论上,这将使您能够访问客户位置,因为该跟踪用户存在一个组,而且多个客户也可以跟踪该用户。

我还没有测试过,但这可以工作。

如果代码或方法中有任何问题,请随时纠正我。

我相信这可以帮助其他用户。