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

问题描述 投票:3回答:1

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

我正在使用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)实时查看特定用户的更新。

我该怎么做?

我的理论解答

[我当时想在集线器中创建一个方法,就像当客户端(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)
}

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

c# signalr real-time-data
1个回答
1
投票

如果仅使用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);
}

从理论上讲,由于该跟踪用户的组存在,因此您可以访问客户机位置,而且多个客户机也可以跟踪该用户。

我还没有测试过,但是可以用。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.