gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 01:55:25 24 4
gpt4 key购买 nike

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

我正在使用 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);
}

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

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

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

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

关于c# - 如何在 SignalR 中显示用户的实时位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60577829/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com