.NetCore SignalR 通过 API 通话加入群组
.NetCore SignalR join group over API call
我想到了以下流程:
一个 .NetCore 网络应用程序,您可以在其中在一个集线器上创建多个组。
用户可以通过传递群组名称加入群组的移动应用程序。
Web 应用程序可以向群组用户发送消息。
我可以通过网络应用程序创建和加入群组,但我不确定是否可以通过控制器执行此操作。
中心:
public class VotingHub : Hub
{
public async Task JoinGroup(string groupName)
{
await Groups.AddToGroupAsync(Context.ConnectionId, groupName);
await SendMessageToGroup(groupName , $"{ Context.ConnectionId} has joined the group { groupName}.");
}
public async Task SendMessageToGroup(string groupName, string message)
{
await Clients.Group(groupName).SendAsync("ReceivedMessage", message);
}
}
控制器:
public class EventsController : Controller
{
private IHubContext<VotingHub> _hubContext;
public EventsController(IHubContext<VotingHub> hubContext)
{
_hubContext = hubContext;
}
[HttpGet("/join")]
public IActionResult JoinGroup(string groupName)
{
_hubContext.Groups.AddToGroupAsync(** I do not have access to ConnectionId**);
return Ok();
}
}
如果这不可能,那么实施上述流程的替代方案是什么?
我相信这是可能的,但事实证明这不是一个好方法。如您所见,您无权访问 connectionId 以将用户添加到组中。因此,最好的方法是从集线器进行,并且连接必须调用此方法。想象一下这种情况:您有要加入该组的 connectionId,并且您通过控制器 POST
它。当时的连接可能没有建立或者掉线,所以连接现在多了一个conncetionId。
我想到了以下流程:
一个 .NetCore 网络应用程序,您可以在其中在一个集线器上创建多个组。 用户可以通过传递群组名称加入群组的移动应用程序。 Web 应用程序可以向群组用户发送消息。
我可以通过网络应用程序创建和加入群组,但我不确定是否可以通过控制器执行此操作。
中心:
public class VotingHub : Hub
{
public async Task JoinGroup(string groupName)
{
await Groups.AddToGroupAsync(Context.ConnectionId, groupName);
await SendMessageToGroup(groupName , $"{ Context.ConnectionId} has joined the group { groupName}.");
}
public async Task SendMessageToGroup(string groupName, string message)
{
await Clients.Group(groupName).SendAsync("ReceivedMessage", message);
}
}
控制器:
public class EventsController : Controller
{
private IHubContext<VotingHub> _hubContext;
public EventsController(IHubContext<VotingHub> hubContext)
{
_hubContext = hubContext;
}
[HttpGet("/join")]
public IActionResult JoinGroup(string groupName)
{
_hubContext.Groups.AddToGroupAsync(** I do not have access to ConnectionId**);
return Ok();
}
}
如果这不可能,那么实施上述流程的替代方案是什么?
我相信这是可能的,但事实证明这不是一个好方法。如您所见,您无权访问 connectionId 以将用户添加到组中。因此,最好的方法是从集线器进行,并且连接必须调用此方法。想象一下这种情况:您有要加入该组的 connectionId,并且您通过控制器 POST
它。当时的连接可能没有建立或者掉线,所以连接现在多了一个conncetionId。