问题标签 [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.

0 投票
1 回答
1019 浏览

signalr - SignalR 背板

我已经实现了 SignalR BackPlane,它似乎工作正常。

已使用此URL作为参考。

我正在创建一个新的 SQL 数据库来实现 SingalR。我的疑问是:为什么我必须创建一个新的数据库,或者为什么我不能利用现有的数据库?

  1. 我可以使用现有的数据库来实现相同的目标,而不是创建新的数据库吗?
  2. 在现有数据库中创建新表需要注意哪些 SQL 权限?
0 投票
1 回答
384 浏览

signalr - 如何拦截 ScaleoutMessage 广播:(编辑:如何将消息直接发送到 ServiceBus SignalR 背板)

我有以下情况:

  1. 用户对服务器上某些资源的请求,此请求是长时间运行的任务,非常像 2~3 秒到 10 秒。我们向用户发出 JobTicket,因为我们的用户想要等待。
  2. 收到请求后,我们将该请求存储在持久性存储中,并以 JobTicket (GUID) 的形式向用户发出令牌。
  3. 用户与 Hub 建立连接以获取有关该 GUID 的信息。

在后台:

  1. 我们有 WAS 托管以及 Windows 服务来对该请求执行一些操作。
  2. 完成后,WAS 托管/Windows 服务调用我们的 Web 应用程序,该作业已完成。
  3. 从那里根据工作票,我们确定哪个用户以及在其连接上我们让用户知道其工作已完成。

现在我们有服务器场,我们使用的是 Windows Server On Prem ServiceBus 1.1,它工作正常,但我们面临的挑战是我们无法拦截基于 ServiceBus 的背板消息广播,并且消息将发送到所有客户端。由于我们有农场,中间用户可能会断开连接并连接到基于负载均衡器的其他服务器,因此我们需要使用服务总线进行横向扩展,作为无缝集成的一种,我们也在应用程序中用于内部目的,所以我们不想在复杂的解决方案中使用任何其他组合。

我已经尝试使用IHubPipelineModule但仍然横向扩展消息广播没有通过它,我尝试直接连接 SignalR 代码并通过它进行调试,但它需要很长时间。我不想在实际代码中搞乱一些任意的东西。正如我所看到的,OnReceive我可以看到消息即将到来,但无法进一步跟进。我只需要一个小的机制,我可以拦截广播消息并确保它通过浪费资源和安全问题到达预期的客户端而不是所有客户端。

请在这个问题上帮助我,从过去 4 天开始就卡住了,无法找到任何解决方案,同时我想采用建立模式并且不想为这种小问题分叉任何特殊构建我相信你们中的一位专家知道我可以如何无缝地做到这一点。

谢谢,史瑞尼克

0 投票
1 回答
645 浏览

azure - 为什么使用 SignalR 无法很好地扩展消息传递时间?

我仍在测试 SignalR,但对我来说真正重要的一件事是消息尽快到达客户(我正在处理实时股票价格)。

事情是——在我尝试过的几乎所有场景下——从完全本地到在 Azure 上运行 100 个实例(带有背板和一切......),消息从服务器到客户端的时间增加了随着连接的客户端数量呈指数增长。

我已经尝试过集线器、持久连接、.net 客户端、运行在 phantomJS、zombieJS 和 node.js 中的 JS 客户端……我已经尝试了很多配置,但行为总是相同的,这让我得出的结论是,这是 SignalR 固有的。

我知道 SignalR 可以在很少的服务器上处理数千个并发客户端,但是如果消息需要几秒钟才能通过(在同一个 Azure 区域中),那对我来说毫无用处。

知道什么可能会减慢消息的速度吗?

谢谢

0 投票
1 回答
590 浏览

signalr - 管理外部数据存储中的连接的信号器

我们正在寻找一种方法来让后台进程将消息推送到连接的客户端。

我们采用的方法是,每当建立新连接(OnConnected)时,我们将 connectionId 与一些请求元数据(用于以后过滤)单独存储在我们的 mongo db 中。当事件发生(从客户端或后端进程触发)时,workerrole(另一个后台进程)将侦听这些事件(通过消息传递或其他方式),然后根据事件详细信息,它将使用捕获的元数据过滤连接的客户端。

该方法似乎还可以,但是当我们遇到问题时

  1. 信号器服务器出现故障
  2. 在服务器备份之前,客户端断开连接(关闭浏览器或其他)
  3. 信号器服务器备份

  4. 我们在 mongodb 中留下了我们不知道它们的连接状态的连接

我想知道是否有更好的方法来做到这一点,目标是能够针对特定连接的客户端将消息推送到后端服务(工作角色)

顺便说一句,我们正在使用带有服务总线背板的横向扩展选项

0 投票
0 回答
359 浏览

signalr-hub - 使用 SQLBackPlane 从 HubContext 发送 SignalR 消息时出现 MissingMethodException

尝试从 HuContext(即:从服务器而不是另一个客户端)发送信号器消息时,我收到以下错误。这在我的原始原型中工作,但自从我实施 Backplane 后就停止工作了:

找不到方法:“Microsoft.AspNet.SignalR.Hubs.IHubConnectionContext Microsoft.AspNet.SignalR.IHubContext.get_Clients()”。

我在 Hub 类上创建了一些静态方法,以方便在处理期间触发 SignalR 消息(按照我找到的示例)。Hub 类目前看起来像这样(为简洁起见,删除了类似的方法):

我怀疑我收到此错误的原因是因为这是在使用背板时处理此类要求的不正确方法(因为它在原型中工作),但我已经搜索了 SignalR 文档并且找不到替代方法这样做。

我想我可以将 SignalR 客户端类添加到服务器并以客户端的方式连接......但这似乎不是一个非常优雅的方法。

0 投票
0 回答
107 浏览

c# - 从不同的进程调用 SignalR 客户端方法

我有一个网站,它运行 SingalR 来通知前端某些后端事件,以便它可以更新。后端包括网站后端以及作为控制台应用程序、Azure 工作者等运行的其他服务,这些服务可能与网站运行在同一台机器上,也可能不在同一台机器上。

我需要一些方法来获取这些后端事件并通过 SignalR 将它们发送给客户端。我会立即使用服务总线,但我担心管理网站中的订阅。我有兴趣最终使用 SignalR 横向扩展(以服务总线作为背板),但我似乎无法发布到背板主题,因为主题的名称是内部实现细节。

那么问题来了:我应该在网站中使用服务总线订阅以及如何管理订阅(以确保它符合 ASP.Net 生命周期),还是应该尝试使用服务总线背板以及如何发布给它?

0 投票
1 回答
279 浏览

database - SignalR背板和数据库输入?

我们有一个负载平衡的网络服务器设置,因此我们希望使用 SignalR 与 SignalR 背板进行客户端/服务器通信。

当客户端向服务器发送内容时,我们如何确保只有一个服务器写入数据库?背板会将消息重新路由到所有服务器,但并非所有服务器都可以将相同的内容写入数据库!

关于如何使用 SignalR 背板并仅从一台服务器写入数据库的任何技术/建议?

在我的理想世界中,我会在一台服务器上接收消息,将消息存储到 DB,然后将消息(可能与传入消息不同)放在背板上。

0 投票
1 回答
475 浏览

signalr - 基于ScaleoutMessageBus的Signalr背板需要递增标识符吗?

我正在尝试了解如何创建自己的 IMessageHub。我不想依赖任何额外的基础设施,而且消息数量很少。所以我决定使用一个简单的套接字解​​决方案来复制消息。我查看了不同 ScaleoutMessageBus 实现的源代码,但这些似乎需要一个额外的严格递增的标识符(例如,Redis 实现使用“INCR”)。有人可以确认是这种情况吗?一个随机标识符不会砍吗?

标识符是下面 OnRecieved 方法的第二个参数

0 投票
1 回答
126 浏览

asp.net - SignalR Scaleout 进行重复调用

我们正在尝试扩展我们的系统,但我们不确定如何在 Azure 网站中使用未来的背板扩展。这是我们的场景。

我们的问题是代理端的背板导致对代理客户端的多次调用。

我们应该做什么?

在此处输入图像描述

0 投票
2 回答
1554 浏览

sql-server - 使用 SQL 服务器扩展 SignalR - 我们多久可以清除一次数据?

我希望以本文为指导,使用 SQL Server 编写一个横向扩展的 SignalR 应用程序。在做了一些测试之后,看起来Messages_0我创建的 SignalR 数据库中的表(根据文章)可能会变得非常大。

我想知道的是,这些数据多久可以清除一次?我看到有一InsertedOn列,所以我认为一两天后数据将不再相关。有这方面的任何文件或指南吗?

我想知道我是否可以设置一个工作来清除一周以上的任何东西,以防止桌子随着时间的推移变得太大。