api - .NetCore SignalR 通过 API 调用加入组
问题描述
我有以下流程:
一个 .NetCore Web 应用程序,您可以在其中在一个集线器上创建多个组。用户可以通过传递组名加入组的移动应用程序。Web 应用程序可以向群组用户发送消息。
我可以从 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。
推荐阅读
- python - Flask - 单元测试引发 assertionError
- c# - Blazor 应用程序给出错误在 EntityFrameworkCore 中添加迁移时指定的 deps.json [路径] 不存在
- sql - 注释 jpa @Query
- python - 如何在python中绑定退格键
- python - 如果夹具设置或拆卸失败,有没有办法跳过 pytest?
- javascript - bsmultiselect 在 div 上一次选择一个选项
- java - JavaFX程序在部署后没有管理员权限无法运行
- .htaccess - Htaccess 重写/重定向问题从 .png.webp 回到 png
- c - 尝试将数组从主内存复制到共享内存的段错误
- arrays - 用 { } 初始化数组