我看到许多涉及建立信号器连接的问题。用户,但我想连接PR。会议。因此,同一用户可以打开多个浏览器/选项卡,每个浏览器/选项卡都具有独占连接。
所以我的问题是使用用户的范围太广,但是我也不能使用会话ID,因为it changes pr. request
我最好的选择是使用cookie,这也提示在this question的底部
但是如何将特定的会话映射并关联到其连接ID,并再次找到正确的会话?链接的问题会映射用户。
我的中心类简化了:
public class MessageSender : Hub, IMessageSender
{
private readonly IHttpContextAccessor _httpContextAccessor;
public MessageSender(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
public override Task OnConnectedAsync()
{
Groups.AddToGroupAsync(Context.ConnectionId, _httpContextAccessor.HttpContext.Request.Cookies["SomeCookieCreatedForSessionX"]);
return base.OnConnectedAsync();
}
public async Task SendMessage(string message)
{
await Clients.Group(_httpContextAccessor.HttpContext.Request.Cookies["SomeCookieCreatedForSessionX"]).SendAsync("initMessage", message, connectionId);
}
}
另一个调用类:
public async Task<IActionResult> Submit(Dictionary<string, string> inputs)
{
await _messageSender.SendMessage("Job Started something something.."]);
// return etc.
}
如何将会话X映射/关联到connectionId?
谢谢