问题标签 [signalr-backplane]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
signalr - 基本 SignalR IMessageBus 实现
我有一个服务应用程序,它的工作方式非常类似于 SignalR 背板,所以我认为创建自己的IMessageBus
实现来与后端对话是个好主意,而不是推出我自己的东西。问题是我找不到关于这份合同的太多信息。虽然我一直在看代码(看起来非常好),但我很难理解一些概念。
Task Publish(Message message);
这个很简单,基本上它必须向后端发送一条消息。我不担心这个,因为我的应用程序从服务器到客户端是单向的。
IDisposable Subscribe(ISubscriber subscriber, string cursor, Func<MessageResult, object, Task<bool>> callback, int maxMessages, object state);
return
: 尽管说了IDisposable
,我看到它总是返回一个 Subscription 对象,但是为什么IDisposable
呢?subscriber
标识一个连接。该连接可以订阅或取消订阅组。cursor
: 是最后收到的消息 ID。callback
: 这个回调什么时候执行?state
: 这究竟是什么?
有人可以解释一下这种方法是如何工作的吗?
.net - 为 SignalR 实现背板和消息总线
我的团队正在运行具有负载平衡的 IIS Web 服务器和 MongoDB 的环境。我们希望使用 SignalR 向我们的用户推送通知(未来可能更多)。我正在尝试实现一个新的 SignalR ScaleoutMessageBus,以便我们可以使用现有的 MongoDB 作为 SignalR 的背板。我在 GitHub 上找到了一个看起来像是我想要的东西的实现。不幸的是,它是为 SignalR 0.5.3 实现的,并且与 SignalR 2.0.2 完全不兼容。
我正在尝试对其进行更新以使其正常工作并使以下部分正常工作:
- 依赖注入正确加载新的消息总线
- 正确连接到数据库并跟随尾随光标获取新消息(与 SignalR 无关)
- 主题和订阅似乎可以使用现有功能
我无法理解 ScaleOutMessageBus 的某些部分是如何工作的,尤其是消息流的功能以及它们与整体功能的关系。查看 SQL 背板,看起来我想用对数据库的读写替换对流的读写?那是对的吗?
这是我的发送实现(似乎正在工作)
我的 MongoMessageWrapperClass 扩展了 ScaleoutMessage,但广告了尾随光标引用的 _id 属性。
这似乎正确地将消息写入数据库。我认为我的下一步是创建一个新的 OnReceived,当我的尾随光标找到新消息并从 Mongo 解包数据以获取原始消息并将它们传递给现有的 ScaleoutMessageBus 基类时调用它。
如果我这样做,我应该传入什么作为 OnReceived 的 streamIndex 和 id 值?此外,我在 Send 函数中收到的消息属于 Message 类型,而不是 OnReceived 将其作为参数的 ScaleoutMessage。我应该将 IList 转换为 ScaleoutMessage 吗?
我找不到任何有关构建自定义横向扩展解决方案和背板的文档。有什么可用的(除了通过源代码来弄清楚吗?
signalr - SignalR ISAuthenticated 使用标头
我的目标是:使用自定义标头和我自己的令牌来针对我的信号器服务对用户或机器进行身份验证。
我们一直在 ASP.net WEB API 下成功地使用这种方法来执行我们自己的基于自定义声明的身份验证和授权。
我们的 Web Api 如下:
然后我们会有一个 AuthorizationHandler 覆盖 Thread.CurrentPrincipal = principal; 我们就完成了。
在 SignalR 中,我尝试实现: 1. 使用 Authorize 标记我们的集线器 2. 实施自定义授权属性 3. 尝试自定义模块。但是,如果我们发送正确的标头,除了返回 true 之外,我仍然没有让 Context.User 更改为我们生成的基于声明的主体。
但是我们永远无法让 Context.User 显示用于连接到集线器的实际用户。
欢迎任何建议。
我们想要实现这一点的主要原因是因为我们有几个不同的用户/机器类型连接到我们的系统。
大家有什么建议。
c# - signalR 和 SQL 背板向组发送消息
我遇到了组问题,通过 SQL 背板向组发送消息
我按照 此处概述的步骤进行操作,在未配置背板的情况下,我的客户端通过组接收所有消息,当我配置背板时,我的客户端不接收消息。
我已经进行了调试打印OnDisconnected(), OnReconnected()
,它们没有被解雇。所以我知道客户端仍然连接
c# - SignalR 广播拦截使用管道模块
我创建了一个设置,其中我有一个后端服务,它通过 SQL 背板使用 SignalR 广播消息,客户端通过 Web 场上的 MVC 5 + SignalR Web 应用程序接收消息。我想在消息从 Web 应用程序到达客户端之前拦截消息并对消息进行一些更改,特别是返回 HTML 给客户端而不是原始数据。
我已经能够在消息来自 Web 应用程序(非农场)的开发环境中实现这一点,添加一个HubPipelineModule
具有OnBeforeOutgoing
方法覆盖的类。但是,当消息从不同的源(后端服务)广播时,不会调用管道的这一部分。
OnBeforeOutgoing
从不同的广播源转换时,我可以在哪里(以及如何)连接到 SignalR 管道以获取要调用的方法?
redis - 使用 Redis 的 SignalR 横向扩展
http://www.asp.net/signalr/overview/signalr-20/performance-and-scaling/scaleout-with-redis 我按照这个链接来扩展我的简单信号聊天视觉工作室项目。
我在运行 redis 的 azure 上制作了我的 ubuntu 虚拟机。
我添加了 GlobalHost.DependencyResolver.UseRedis("server", port, "password", "AppName"); 到我的启动课程,现在我只在我的机器上测试它,而不是其他服务器。但它不起作用。
一旦我输入该行,我的聊天程序就会卡在第 1 行(见下文)并且永远不会到达第 2 行。
1)$.connection.hub.start().done(function () { 2) $('#sendmessage').click(function () { 我做错了什么?
azure - 用于角色间通信的 Azure SignalR 和背板
我目前在 Azure 网站上使用 signalR 使用单个实例将数据推送到客户端。没问题。
我们将项目拆分为单独的 web/worker 和 wcf 角色,以便我们可以独立扩展它们。
该网站将像这样工作。
方案 A
用户向 Web 角色提交一些数据,并将其放入服务总线队列中,为工作人员 A 做好准备,向工作人员 A 发送一条消息,说明已添加新项目以防其空闲(以节省轮询)。当工作人员 A 处理完它后,将消息发送回 Web 角色,然后推送给特定的客户端。
场景 B
在 wcf 角色中接收数据并将其放入不同的服务总线队列中,为工人 B 做好准备,wcf 角色向工人 B 发送消息,说明已添加新项目,以防其空闲。当工作人员 B 处理完它后,向 Web 角色发送一条消息并将其推送给特定的客户端。
下图很糟糕:
我将为用户的 Web 角色启用 signalR 服务总线背板。我不确定的是如何让我的角色相互交流。
我需要:
网络角色 => 工人 A
工人 A => 网络角色
wcf 角色 => 工人 B
工人 B => 网络角色
我是否在 web、worker A 和 worker B 上都创建了带有服务总线主题的集线器?然后以某种方式与 signalr .net 客户端连接?如何确保它适用于网络角色的所有实例而不公开?
出于某种原因,数百个客户端通过 JavaScript 连接到我的 Web 角色中心似乎很简单,但尝试连接一些内部的,我不太明白。
azure - 使用 Azure 服务总线时 SignalR 无法连接
使用 windows azure 服务总线作为背板时,我在连接 SignalR 时遇到随机问题。调试它的问题是它似乎是随机发生的(没有任何代码更改),但是当它确实发生时,它需要一段时间才能消失。我通常会尝试关闭 Visual Studio、重新启动、切换到长轮询、关闭 iis express 或任何数量的东西,但无法确定似乎可以解决它的问题。也许这是 azure 服务本身的问题。
我设置了日志,这就是返回的内容: SignalR.ServiceBusMessageBus 信息:0:订阅服务总线中的 5 个主题... SignalR.ServiceBusMessageBus 错误:0:无法创建服务总线订阅或主题:令牌提供者在访问“ https://x-sb.accesscontrol.windows.net/WRAPv0.9/ ”时无法提供安全令牌。令牌提供程序返回消息:'无法解析远程名称:'x-sb.accesscontrol.windows.net''。
我读过其他有同样错误的帖子,但它们似乎不相关。
我的 SignalR 配置如下所示:
当我切换到 longPolling 时,它会暂时工作,但随后又开始失败。SignalR 开始忽略 longPolling 设置并尝试使用 websockets。
一旦我删除 UseServiceBus 一切正常,但是有了它,我会遇到各种问题,要么它没有连接,要么它试图使用 websockets,即使指定了 longPolling(这会导致它失败)。
redis - 我如何判断我的 SignalR 背板 (Redis) 是否真的在正常工作?
我目前正在玩 SignalR 2.0.3,使用利用 Redis for windows http://msopentech.com/blog/2013/04/22/redis-on-windows-stable-and-reliable/的 BackPlane 进行扩展
我已经在 VS 中集成了适当的 SignalR.Redis 包。
我对我的启动做了以下更改:
它构建良好。我的客户端似乎连接正常。我可以在客户端和服务器之间发送通知,反之亦然。
从 Redis 客户端,我可以输入:
我认为一切正常,但是...
几个问题: 1)我怎么知道这实际上有效?
2)我可以在 Redis 服务器上检查什么(通过 Redis 客户端)?
3)什么数据结构(键/值对、列表、散列、集合)中存储了什么?
我想更深入地了解正在发生的事情。我已经查看了以下命令: http ://redis.io/commands 没有什么东西会在我身上跳出来,这将帮助我了解真正发生的事情。
有人可以在这里指出我正确的方向吗?
谢谢,约翰B
sql - 是否可以将 SignalR 消息直接添加到 SQL 背板?
我想知道是否可以将 SignalR 消息直接添加到 SignalR SQL 背板(来自 SQL),这样我就不必使用 SignalR 客户端来执行此操作。
我的情况是我有一个为 SQL Service Broker 队列激活的存储过程,当它触发时,我想向 SignalR 客户端发布一条消息。目前,我必须在单独的过程中从 SQL Service Broker 接收消息,然后立即使用 SignalR 集线器重新发送消息。
我希望我激活的存储过程基本上将消息直接移动到 SignalR SQL 背板上。