.NetCore SignalR присоединиться к группе через вызов API - PullRequest
1 голос
/ 18 января 2020

Я имею в виду следующий поток:

Веб-приложение .NetCore, в котором вы можете создать несколько групп в концентраторе. Мобильное приложение, в котором пользователь может присоединиться к группе, передав ей имя группы. Веб-приложение может отправлять сообщения групповым пользователям.

Я могу создавать группы и присоединяться к ним из веб-приложения, но я не уверен, что это возможно сделать через контроллер.


Концентратор:

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

Если это невозможно, какой будет альтернатива для реализации описанного выше потока?

1 Ответ

1 голос
/ 20 января 2020

Я верю, что это возможно, но доказуемо, что это не очень хороший способ. Как видите, у вас нет доступа к ID соединения, чтобы добавить пользователя в группу. Так что лучший способ сделать это - через концентратор, и соединение должно вызывать этот метод. Представьте себе такой сценарий: у вас есть connectionId, который вы хотите присоединить к группе, и вы POST через контроллер Соединение в то время могло быть не установлено или прервано, поэтому соединение имеет другой идентификатор conncetionId.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...