我正在为客户端构建用户位置跟踪应用程序。
我正在使用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)
}
我还没有测试过,但是有更好的方法吗?
如果仅使用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); }
从理论上讲,由于该跟踪用户的组存在,因此您可以访问客户机位置,而且多个客户机也可以跟踪该用户。
我还没有测试过,但是可以用。
如果代码或方法中有任何问题,请随时纠正我。
我确实相信这可以帮助其他用户。