。NetCore SignalR通过API调用加入组

问题描述 投票:1回答:1

我想到以下流程:

.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);
        }
    }

Controller:

    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();
        }
    }

如果不可能,实现上述流程的替代方法是什么?

api .net-core websocket signalr signalr-hub
1个回答
1
投票

我相信有可能,但事实证明这不是一个好方法。如您所见,您无权访问connectionId来将用户添加到组中。因此,最好的方法是从集线器开始,并且连接必须调用此方法。想象一下这种情况:您具有要加入该组的connectionId,并通过控制器将其POST。当时的连接无法建立或下降,因此该连接现在具有另一个conncetionId。

© www.soinside.com 2019 - 2024. All rights reserved.