问题标签 [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 redis 背板更新未推送到客户端
我们已经在 web 应用的 owin 启动代码中配置了 redis 背板。
Web 应用程序在计时器上运行后台作业,如果发生重要事件,该作业会唤醒并通知客户端。查询后端后,后台作业调用一个简单的 HubService 包装器,该包装器将 IHubContext 作为依赖项,并最终调用集线器上的 Client.All.notify 方法向下推送到客户端:
中心服务:
HubContext 在启动时注册:
这在没有背板的情况下工作正常,但在配置背板的情况下不起作用。我已经在调试器中验证了正在进行调用,但它并没有将其传递给客户端。
此外,如果我们通过 js 或 signalr.client 客户端从客户端(Web 应用程序外部)调用信号器集线器,则背板会像宣传的那样工作。
在我们从 Web 应用程序本身直接调用集线器上下文而不首先从客户端启动调用的场景中是否缺少某些东西?
sql-server - SignalR SQL Server 代理 - 孤立的服务代理队列错误
我在 SQL Server 2008 上使用 SQL Server Broker 进行具有 SignalR v2.1.2 的横向扩展。最近发现我们每天在数据库日志中产生 50k+ 错误。经过一番研究,从 12 月开始有 3 个孤立的 Service Broker 队列。错误示例:
2016-02-27 23:58:01.79 spid30s 激活的 proc '[dbo].[SqlQueryNotificationStoredProcedure-2ffbddba-6ddc-4ad0-88b4-45a405e975e0]' 在队列 'MY_SIGNALR_DB.dbo.SqlQueryNotificationService-2ffbddba-6ddc-4ad0-88b4 上运行-45a405e975e0' 输出以下内容:'找不到存储过程'dbo.SqlQueryNotificationStoredProcedure-2ffbddba-6ddc-4ad0-88b4-45a405e975e0'。
这些队列是在 12 月创建的,并且由于某种原因没有被删除。正如预期的那样,相应的 SP 显然被删除了。为此,数据库将每 5 秒产生一次错误(相当于每天 50k,有 3 个队列)。每个队列都包含一条消息。
问题:
什么会导致这种情况?
是否可以实施其他 SignalR 设置以确保清理这些设置?
这是 SQL Server 服务代理中的错误吗?
是否有描述 SignalR 关于队列及其到期的预期行为的文档?
感谢您的时间。
c# - SignalR 背板未使用 1.x 版创建表
在我的项目中,SignalR 工作正常。但是由于在 Web Farm 中引入了负载平衡,我打算按照这篇文章使用 Backplane 和 SQL:http ://www.asp.net/signalr/overview/performance/scaleout-with-sql-server 。
如果我使用 Microsoft.AspNet.SignalR 和 Microsoft.AspNet.SignalR.SqlServer 的最新软件包(版本 2.2.0)并选择 4.5 .Net framework,背板工作正常。但是,由于某些原因,我需要坚持使用 .Net 4.0 版本而不使用 Owin。当我安装版本为 1.1.4 或 1.2.2 的 Microsoft.AspNet.SignalR 和 Microsoft.AspNet.SignalR.SqlServer 包并使用 .Net 4.0 时,SignalR 似乎工作正常,但背板(使用 SQL)似乎没有要开始了,因为数据库中没有创建表。如果我启用跟踪,则没有跟踪文件。仅生成与传输相关的跟踪文件。我在 global.asax.cs 中使用以下代码:
signalr - 可以/应该使用 SignalR 背板来构建分布式缓存吗?
我们的 Web 应用程序使用内存缓存(应用程序数据缓存)来提高吞吐量,这样就不必为每个请求从数据库(SQL Server)加载频繁查询的数据。潜在地,它将部署在网络农场中,因此我们必须解决必须同步所有节点的缓存的经典问题。所以我们需要的是分布式缓存。
现成的解决方案是 NCache 和 REDIS(可能还有更多)。但是,由于我们已经在使用 SignalR Backplane 将数据集的更改传达给 Windows 服务(和浏览器客户端),我想知道它是否可以用于实现分布式缓存。
这样做,我们将(或多或少)重用我们现有的数据集已更改消息,但在 Web 应用程序本身中订阅它们以使其缓存无效。好处是我们不必引入新的库/技术。
我想我最大的问题是:这有意义吗?而且,SignalR 背板是否足够可靠以确保不会丢失任何事件导致缓存过时?还是这种架构滥用?
redis - Microsoft.AspNet.SignalR.Redis 需要 StackExchange.Redis.StrongName,但 StackExchange.Redis.Extensions.Core 需要 StackExchange.Redis
Microsoft.AspNet.SignalR.Redis和StackExchange.Redis.Extensions.Core都在同一个项目中使用。前者需要StackExchange.Redis.StrongName,而后者依赖于StackExchange.Redis。显然,您不能在同一个 Bin 文件夹中同时拥有StackExchange.Redis.StrongName和StackExchange.Redis 。
有没有办法强制Microsoft.AspNet.SignalR.Redis和StackExchange.Redis.Extensions.Core都与StackExchange.Redis.StrongName或StackExchange.Redis一起使用?
signalr - SignalR 背板的可靠性如何?
如果所有消息都将到达所有订阅节点,SignalR Backplane 的可靠性如何?它是在下面使用可靠的协议,还是有可能丢失消息?
显然,可能是(例如)由于某些网络问题,一个节点关闭了一段时间。当它再次变得可达时,SignalR 背板将传递所有中间消息。这至少是我从davidfowl 了解到的:
[...] 这个非常重要!SignalR 不是可靠的消息传递,它是一种连接抽象。我们可能会缓冲消息以进行长轮询,但您不能永远依赖这些消息。如果您有需要保留的重要消息,请保留它们。
但在这种情况下,“永远”有多长?可以量化/配置吗?
如果要在 SignalR 背板之上构建可靠的系统,是否还有其他需要考虑的情况?
c# - Signalr SQL 横向扩展:使用多个流的缺点?
在SignalR 性能页面中,我们可以阅读:
此上下文中的 Stream 是横向扩展提供程序使用的缩放单位;如果使用 SQL Server,则这是一个表,如果使用 Service Bus,则为 Topic,如果使用 Redis,则为 Subscription。每个流确保有序的读写操作;单个流是潜在的规模瓶颈,因此可以增加流的数量以帮助减少该瓶颈。如果使用多个流,SignalR 将自动在这些流中分发(分片)消息,以确保从任何给定连接发送的消息是有序的。
流计数(即 SQL 中的表)可以这样设置:
但TableCount
在 SQL 横向扩展中默认为 1。如果这是一个规模瓶颈,为什么默认为 1 ?如果我将其设置为 50 怎么办?
该文档没有提供任何线索来决定给出哪个值。我应该将其设置为 1、3、10、1000 吗?大价值的优缺点是什么?它只会增加延迟吗?
notifications - 在 SiganlR 中处理并发连接
我正在使用 .Net 框架 4.5.2,我将开始制作一个通知系统,该系统将通知从 Web 应用程序发送到从 Windows 窗体桌面应用程序连接的用户。
经过调查,我发现合适的解决方案是使用 signalR,因为它支持在将通知发送到连接的客户端之前过滤通知。
但我担心的是:当我在 Web 应用程序中创建 HUB 类时,我实现了 OnConnected 方法,该方法将检测连接到服务器以接收通知的任何客户端,我考虑在字典中收集连接的用户(在内存)我知道这是一个无法在生产中实现的解决方案,因为在内存变量(字典)中设置连接的用户是不可靠的。在我的情况下,连接用户的数量可能是 20,000 或更多,并且将来可能会变得更大。我需要知道跟踪所有连接用户的最佳方式,同时知道处理并发请求的最佳方式,而不会出现任何可伸缩性问题。我是这方面的新手,我必须尽快做出决定。
我还需要知道可以在集线器类中覆盖的 OnReconnect 方法的用途。
如果 iis 出于任何原因重新启动 Internet 应用程序,我还需要知道如何处理连接以不丢失。
c# - 使用横向扩展服务器保存 SignalR 连接状态
使用 SignalR 2.2.0,我想验证有关在多服务器横向扩展设置中执行集线器方法的客户端的观察结果。
我使用 SQL Server 横向扩展消息总线在多服务器模型中运行 SignalR。
当客户端连接时,OnConnected
会按预期调用 Hub 的方法。我保存Context.ConnectionId
在静态字典中。
当客户端稍后调用集线器的方法时,似乎场中的另一台服务器正在执行集线器方法,而不是最初运行 OnConnected 方法的服务器。hub 方法中的Context.ConnectionId
值是正确的,但它在字典中不存在。
这是扩展模型中的预期行为吗?如果是这样,那么我假设我应该将连接状态数据保存在数据库中,以便所有服务器上的所有 Hub 都能够根据 ConnectionId 查找连接状态。
c# - SignalR + RabbitMQ 背板:SignalR 客户端重复接收相同的消息
https://github.com/mdevilliers/SignalR.RabbitMq/issues/43
我很难让它工作,有人可以看看这个,看看设置是否有问题?
这是我的测试:
我启动了两个自托管服务器,配置为相同的 RabbitMqScaleoutConfiguration
服务器:
订户:
出版商:
这将在第 12 次左右运行,通常这就是我得到的:
......永远这样继续下去