问题标签 [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 投票
0 回答
442 浏览

signalr - SignalR Redis 消息总线

我使用 RedisMessageBus 作为背板。从这篇文章https://www.asp.net/signalr/overview/performance/scaleout-in-signalr我知道,服务器从其本地缓存向客户端传递消息。

但是如果服务器离线并且错过了来自消息总线的一些消息会发生什么?

0 投票
1 回答
774 浏览

c# - 如何通过 SignalR websockets 从控制台程序推送数据?

我有一个作为 Azure Web 应用程序运行的网站,该应用程序配置为使用 SignalR 和 Azure 服务总线横向扩展背板。一切正常,客户端通过 /signalr URL 连接,我可以将数据从服务器推送到连接的客户端。

我还有几个控制台应用程序,它们会定期运行并输出新数据。我还想将新数据推送到连接网络的客户端。

如何将我的非 Web 应用程序与 SignalR 联系起来?我看到的所有示例都假设横向扩展集群中的每台服务器都是面向 Web 的。我需要做一些特殊的设置来让外部进程加入 SignalR 集群并能够通过 SignalR websocket 连接将数据推送到连接到 web 的客户端,而不必让它们也成为 web 应用程序吗?

0 投票
1 回答
727 浏览

c# - Signalr,客户端说已连接但无法通过服务器进行通信

我们有一个客户端和一个服务器,它们通过信号器进行通信。在客户端第一次启动时,它能够通过信号器与服务器连接,并通过集线器与一些信号器方法进行通信。但是在特定事件之后,服务器无法通过信号器进行通信。但在客户端它显示为连接已连接。以下是与服务器连接后来自客户端的信号器跟踪日志。

在此之后,尽管客户端仍然是连接的服务器,但无法通过信号器向客户端发送任何消息。我们的 2 个客户端和所有客户端信号器跟踪日志都面临这个问题,它在连接被触发后显示了这些日志行。

我们正在使用 SQl 服务器和 SQL 服务器中的背板设置来使用横向扩展。上面的日志跟踪回调中未找到 id 意味着什么?即使客户端日志显示为连接,服务器也无法与客户端通信可能是什么问题?

0 投票
1 回答
402 浏览

c# - SignalR 背板跟踪日志

在我们的应用程序中,我们使用 sql server 实现了信号器横向扩展。背板已配置,但似乎无法将消息发送到与其连接的所有服务器。是否有事件或任何其他方式来记录到达背板的请求以及它将这些消息发送到哪些服务器,以便我们确定问题出在哪里。我们可以在每个服务器中启用信号器跟踪日志,以下是来自它的跟踪。但是这里的信息太少,我们无法找到问题。

我如何知道 sql 背板是否已经在工作,如果没有?

0 投票
1 回答
1073 浏览

sql-server - 带有 sql 背板的 Signalr 横向扩展

我已经使用 SQL Server文档查看了 SignalR 中的 Scaleout 简介和SignalR Scaleout 的介绍,但是关于它的实际工作原理,我有一些令人困惑的事情。

  1. 背板如何识别所有连接到它的服务器?有没有办法从背板获取连接的服务器列表?
  2. 如果两台服务器有两个不同的 dns 名称(例如:- abc.com 和 123.com)但连接到同一个 sql 背板,消息是否也会发送到这些不同的 dns 服务器?. 如果是这样,如果客户端连接到 abc.com 但请求发送到 123.com,是否会通过 abc.com 传递给客户端?
  3. 在文档中,它说所有服务器都将消息保存在其本地缓存中。有没有办法知道特定服务器收到了这条消息,以便我们可以在某个地方记录它?
0 投票
0 回答
1735 浏览

c# - SignalR“无法成功初始化传输。尝试指定...”使用 UseSqlServer 时

我在用着

为使用 signalR(版本 2.2.1)的 Web 应用程序设置 SQL 背板。Web 应用程序托管在多个服务器和多个生产站点上。每个站点都有自己的数据库。

这在大多数服务器上都可以正常工作(signalR 连接和消息在客户端之间按预期流动)。

但是 - 对于某些站点 signalR 无法连接,并且 fail() 回调处理程序(客户端 javascript)中存在以下消息:

“无法成功初始化任何传输。尝试为自动初始化指定不同的传输或根本不指定传输。”

启用客户端日志记录时,它显示 signalR 无法使用任何协议进行连接。

SignalR:后备传输已用尽。

工作站点和非工作站点之间的唯一区别是数据库连接字符串。在针对生产数据库进行本地调试(在我的开发机器上)时,我看到了相同的行为。所以我认为问题与数据库中的 SignalR 表有关,但是在编写生产数据库脚本并在本地恢复时,问题不存在。除了数据库名称之外,所有网站的连接字符串都是相同的。

我不明白为什么 signalR 不能连接几个站点(30 个中的 2 个~)——唯一的区别是数据库。如果我注释掉/禁用 UseSqlServer 配置,它可以工作,但是由于原因没有启用同步。

欢迎提出任何解决此问题的建议。我看过与 signalR 无法连接相关的帖子,建议的解决方案与 global.asax 中的 Application_PreSendRequestHeaders 的实现有关。不过,在这种情况下,这似乎不是问题。

0 投票
0 回答
307 浏览

signalr - 具有横向扩展功能的 SignalR Server 广播

我们已经阅读了两个竞争设计https://docs.microsoft.com/en-us/aspnet/signalr/overview/performance/scaleout-in-signalr

简而言之,我们拥有的是跨多个服务器网络的多个应用程序,通过 SignalR 在多台机器上向多个浏览器广播事件/消息。重要的是,浏览器/客户端永远不会直接连接到应用程序。所有客户端都连接到服务器,该服务器的唯一职责是接收来自服务器应用程序的消息并将它们代理到连接的客户端 - 这些称为消息到客户端代理服务器。

这两种方法是:

所有服务器都将消息放在 SignalR 集线器上,SignalR 横向扩展背板将这些消息分发到所有消息到客户端代理服务器,这些服务器将它们下推到浏览器。

所有服务器都使用 singalR 客户端连接到消息到客户端代理服务器,通过 signalR 客户端将消息直接推送到单个消息到客户端代理服务器,然后将其推送回 SignalR 横向扩展背板消息到客户端代理服务器,然后将它们全部发送到浏览器。

我们为此苦苦挣扎的原因都是假设应用程序/服务器引发消息也允许客户端连接到它们......这绝对不是我们的情况。

0 投票
0 回答
236 浏览

azure - 将 SignalR 扩展到多个 WebApp 和 WebJob 实例

我有一个部署为多实例 Azure Web 应用程序的 .NET Web 应用程序。此 Web 应用程序利用 SignalR 向连接的客户端广播消息。我正在使用服务总线背板进行横向扩展,效果很好。

我还有一个连续的 WebJob,它监视服务总线队列,进行一些密集处理,并且作为该处理的一部分,需要向 SignalR 客户端发送广播消息。

似乎有两种方法可以解决这个问题:

  1. 通过使用 HubConnection 和 IHubProxy 与运行在 Web 应用程序上的 SignalR Hub 连接,将 WebJob 视为 SignalR 客户端。这似乎运作良好,这就是我目前正在做的事情。

  2. 以某种方式将 WebJob 视为另一个集线器,并将其添加到服务总线背板。我不确定我会怎么做。然后,我将使用从 SignalR.GlobalHost.ConnectionManager 获得的 IHubContext 广播消息。

我的问题是:

  1. 这样做的一种方法是否比另一种更好?

  2. 如果选项 #2 更好,有人可以发布我将如何执行此操作的链接吗?似乎大多数教程都是关于使用 SQL Server、服务总线主题或 Redis 作为背板的多实例横向扩展。

0 投票
0 回答
760 浏览

c# - SignalR 将组保存到数据库

我在冗余服务器下遇到 SignalR 问题。我在互联网上阅读每个教程/文档的最后几天,但我的 Signal R Server 应用程序(ASP.NET MVC 5)不能在冗余服务器下工作。

到目前为止我所做的:

但是这个解决方案都不能很好地工作。我将知道的是如何保存 Hub.Groups (https://msdn.microsoft.com/en-us/library/microsoft.aspnet.signalr.hub.groups(v=vs.118).aspx)对象数据库中的信号 R 并从那里获取它。

我也想知道 Groups.Add/Remove() 方法在内部是如何工作的。如果 HubClients 存在于组中,那么他更新它还是将 HubClient 重新添加到组中?所有这些信息都必须在 MSDN 上,但是什么都没有!!

有人可以给我一个简单的 SignalR 服务器 Web 应用程序 (MVC 5) 示例,它具有 Scaleout 功能来保存/从数据库中获取组吗?

0 投票
1 回答
1566 浏览

signalr - 带有 Azure 服务总线的 SignalR 背板

我需要实现一个简单的工作人员集群,它可以创建包含大量 pdf 的文件 zip 文件。架构,现在看起来像这样:

  1. 单个客户端(WebAPI + AngularJS)
  2. 完成这项工作的 Hangfire 服务器集群

一旦客户端请求一个新的 zip 文件,该请求就会在 Hangfire 队列中排队。当集群中的一个节点空闲时,作业将启动。在作业执行期间,客户端将收到有关进度的通知。既然是集群,就需要另外一个组件:

  1. 一个所谓的SignalR 背板,用于处理工作人员和客户端之间的通信

我使用 Redis 来实现这个组件,感谢一些 NuGet 包(即Microsoft.AspNet.SignalRMicrosoft.AspNet.SignalR.Redis)和这个文档,这非常简单,我唯一需要做的就是在 Owin 启动文件中添加一些新行;一个给工人:

一个用于 WebAPI,它们是平等的,但 Hangfire 配置:

它就像一个魅力,Redis 做得很好。我会尝试使用 Azure 服务总线(基于此处的链接)重新实现所有内容,我将包Microsoft.AspNet.SignalR.Redis替换Microsoft.AspNet.SignalR.ServiceBus为以下行UseRedis

但是一旦我开始客户端/服务器通信,我就会得到:

无法成功初始化任何传输。尝试为自动初始化指定不同的传输或根本不指定。”

怎么了,应该没问题。。。