如何在 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);
}
理论上,这将使您能够访问客户位置,因为该跟踪用户存在一个组,而且多个客户也可以跟踪该用户。
我还没有测试过,但这可以工作。
如果代码或方法中有任何问题,请随时纠正我。
我相信这可以帮助其他用户。
我正在为客户构建用户位置跟踪应用程序。
我正在使用 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);
}
理论上,这将使您能够访问客户位置,因为该跟踪用户存在一个组,而且多个客户也可以跟踪该用户。
我还没有测试过,但这可以工作。
如果代码或方法中有任何问题,请随时纠正我。
我相信这可以帮助其他用户。