.net-core - 带有redis背板的信号器,向用户发送消息
问题描述
我正在研究使用信号器将消息从 api 发送到特定用户(关键字)。在本地,我的一切都按设计工作(即使使用 redis 背板)。
当我升级到具有多个服务器(azure app 服务)的实际环境时,发送给特定用户的消息似乎不会通过背板流动。如果我向 Clients.All 发送消息,它会起作用。但是,如果我向 Clients.User(username) 发送消息,则永远不会收到该消息。这可以在本地工作,因为它是单个服务器,但似乎不适用于多个服务器。
await this.impersonationContext.Clients.User(mainUserName).SendAsync("msguser", new object[] { mainUserName });
await this.impersonationContext.Clients.All.SendAsync("msg", new object[] { "wtf" });
如果我调用上面的代码,只会触发 msg 事件,但永远不会收到 msguser。
我会在设置上遗漏一些东西吗?这是我的假设,我不能是唯一这样做的人。
下面是我在 startup.cs 中的设置。这是使用 .net core 5 和最新的 nugets 等
services.AddSignalR(options =>
{
options.EnableDetailedErrors = true;
})
.AddStackExchangeRedis(this.Configuration["Redis:Cache"], options => {
options.Configuration.ChannelPrefix = "ImpersonationService";
});
services.AddSingleton<IUserIdProvider, NameUserIdProvider>();
任何帮助,将不胜感激。
更新 #1 看起来用户信息正在通过背板推送(隐藏用户名)。那么也许是来自javascript客户端的连接?
更新 #2 越来越近...看起来订阅没有像我在本地看到的那样为特定用户设置。这可能是websockets吗?
更新 #3 找到它....排序。我错过了集线器上的授权属性,它允许 websocket 连接,即使 websockets 出于某种原因没有进行身份验证(不同的问题)。一旦我添加了授权,它将下拉到使用用户信息进行长轮询并按设计工作
解决方案
推荐阅读
- kotlin - 问:在 Kotlin 中检查任何变量是否不为空的惯用方法
- python - 使用 split(":") 从字符串中获取数字,但我一直缺少第一个数字
- postgresql - Postgres - 创建可以存在于多个模式中的触发器
- php - 后端日志:PHP 注意:试图获取非对象的属性
- python - 如何在 Python 中从图像中读取文本的颜色
- android - 我可以在 AWS 中设置 iOS 和 android 版本吗?
- php - EasyRDF 示例在服务器上不适合我
- javascript - 处理中的图像圆失真 / p5js
- html - HTML/CSS:创建两行,分别为 2 和 3 列,它们应该占据窗口视口并且单元格应该滚动
- variables - Applescript 对列表中的每个项目重复命令。每行作为变量添加到命令