问题标签 [signalr-2]

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 回答
81 浏览

signalr - SignalR - 聊天的正确实现

我需要在我的网络项目上实现聊天。如何在一页上实现它 - 有很多关于它的文章。但我需要具备以下能力: 1. 通知其他用户,有人登录到网站(在任何页面上,不仅在聊天页面上) 2. 通知其他用户,有人注销

所以,我有以下集线器代码:

我将以下代码添加到_layout.cshtml:

通知其他用户,当前用户已登录。但是调试器说,当用户使用不同的 connectionId 重新加载页面(通过页面)时,每次都会调用该对 OnDisconnected/Connect。当我删除此客户端代码时-不会调用该对。如何正确实现它,通知其他用户有人在线,但每次都没有重新连接?

0 投票
1 回答
301 浏览

.net - SignalR 组重新连接

我们有一个使用 SignalR 实现的游戏,它有几个玩家并加入了一个组。但是有些玩家可能会突然下线,我们要启动机器人来代替左边的玩家。我们当前的问题是当我们让一名玩家下线时,但游戏似乎卡在那里。有没有办法重新加入剩余的玩家和启动的机器人并继续游戏?谢谢你。

0 投票
1 回答
939 浏览

javascript - SignalR 与组一起工作无法正常工作

我与signalR一起工作。组功能无法正常工作。

这是我的中心:

这里它使用服务器端:

这是客户端:

这是组添加和删除客户端:

我在 BasketHub 的上下文中创建了该组。但是,当我尝试使用该组时,我没有到达它。并且客户端没有触发通知。

我可以像下面这样使用它:

此致。

0 投票
1 回答
607 浏览

asp.net-core - SignalR 2 Websockets 与 .NET Framework 上的 ASP.NET Core

我有一个在 .NET Framework 4.6.2 上运行的 ASP.NET Core 应用程序。我设法通过使用 owin-middleware 运行 SignalR 2。问题是它使用服务器事件,而不是 websockets。为了使用 websockets,是否可以进行任何设置? 在此处输入图像描述

Startup.cs我打电话给两者 app.UseWebSockets(); app.UseSignalR2()// 自定义扩展方法将 signalR 映射到 appbuilder

如果仅指定 webSockets 传输,则不会出现任何错误,但不会连接。

我使用 ASP.NET MVC 项目使用了类似的设置,它按预期工作,这仅在 .NET Framework 上使用 ASP.NET Core 时重现。

我发现了一些类似的帖子,但我无法使用 websockets 运行它: Using SignalR on an asp.net Core app that target the full .NET Framework

0 投票
1 回答
158 浏览

c# - 使用 SignalR 跟踪用户操作的当前上下文以进行推送通知

如果您查看 StackOverflow (SO) 站点,当您查看特定线程并且该线程有一些更新时,SO 会将通知推送给您。这意味着 SO 知道用户上下文/用户操作(您当前正在查看哪个线程)。我正在尝试使用 SignalR 在我的 ASP.NET Web API 应用程序中构建类似的东西。

为了实现这种类似的行为,我正在执行以下步骤。

  1. 每次用户查看线程时,我都会对端点进行 get 调用以返回线程信息,我正在维护一个字典,每次都会更新该字典,调用此端点。在这本字典中,我将context.connectionId as 键threadId 存储(保留threadId为值,因为多个用户可以同时查看同一个线程)。
  2. 每当对任何线程进行更改时,我都会要求字典向我返回 value == threadId 的所有 connectionId(键)。
  3. 然后我将通知推送到步骤 2 中返回的所有 coonectionId。

问题:

  1. 我觉得这太过分了,可能有一种更简单的方法来完成这一切。处理这种情况的最佳方法是什么?
  2. 您是否认为这种方法可以很好地扩展并且不会影响应用程序性能。
  3. 明天如果我搬到服务器场,这种方法仍然有效吗?
0 投票
2 回答
4521 浏览

jquery - SignalR- Jquery:$.connection.chathub 返回未定义

我正在使用 Asp.net MVC、AngularJs、SignalR 和 Jquery 创建一个聊天应用程序。在聊天视图中,当我尝试设置聊天对象的值时,它传递空值,代码引用位于括号内(var chat=$.connection.chathub;)。因此,没有其他功能起作用。我在这个项目中使用“Microsoft.AspNet.SignalR.2.2.2”。以及 jquery 和 signalr 相关的脚本,例如 'jquery.signalR-2.2.2.js 、jquery-ui-1.12.1.js' 和其他一些 jquery 库。

谁能帮我吗?我附上了代码供您参考。

0 投票
1 回答
655 浏览

c# - SignalR 2、Autofac 3.5、MVC 5 和 OWIN:如何将 SignalR 集线器注入控制器?

我正在尝试使用 SignalR 向我的 MVC Web 应用程序添加通知系统。我想在控制器中发生某些操作时触发通知。

借助Microsoft 出色的 SignalR 文档,让 SignalR 2 启动和运行是一件轻而易举的事,但我正在努力研究如何现在更改该代码以使用 Autofac 进行 DI,以便我可以注入集线器或允许我的东西访问集线器,进入控制器。

我已经按照Autofac 文档中的示例设置了 Autofac 依赖解析器:

并添加了一个集线器:

但现在我不知道如何将集线器注入我的控制器。我试过public SettingsController(IHubContext hubContext),和public SettingsController(IHubContext<TestHub> hubContext),但它们都给了我例外。public SettingsController(IHubConnectionContext<TestHub> hubConnectionContext)public SettingsController(TestHub hubConnectionContext)

注入集线器的正确方法是什么?

编辑:我应该说我已经阅读了很多与此相关的 SO 问题,但还没有找到答案。这些问题要么与 Autofac 和 SignalR 的不同版本特别相关,要么与日期相关。

编辑 2:我正在使用Autofac.SignalR 3.0.2 NuGet 包,但也有Autofac.SignalR2 4.0.0,我不确定是否应该使用它?

0 投票
2 回答
1565 浏览

websocket - SignalR 结合负载均衡器丢失消息

我在硬件防火墙后面有 2 个 Web 服务器 (IIS 8.5),我们的应用程序使用 SignalR 进行一些实时更新。我们使用 SQL Server 作为背板来帮助我们在这个负载平衡的环境中工作。此外,我们在负载均衡器上使用粘性会话来帮助我们在会话期间将用户保持在同一 Web 服务器上。当我们在这种硬件配置中运行时,我们会丢失至少 1/3 的消息。有时我们会收到所有预期的信息,但更多时候我们会错过很多信息。

当我们在单个 Web 服务器上运行时,所有消息都会被接收。有人对解决此问题有任何建议吗?我们已经打开了日志(客户端和服务器),看起来没有任何东西丢失或损坏。我们真的很难过。

编辑 - -

我希望一些额外的细节可以说明情况。

  • 服务器到客户端的消息正在丢失。几乎我们所有的通信都是服务器到客户端。
  • 我们仅使用基于 IP 的粘性会话,并且限制为 5 分钟,但我们会在 5 分钟内丢失消息。
  • 这是一些旧的 SignalR 代码,自 SignalR 1(甚至更早版本)以来仅被最低限度地触及。 我们在内存中保留了用户列表以及他们的连接,我们使用该列表将通知发送回客户端。这似乎很可能是问题的原因,但是对于粘性会话,用户应该至少在同一台服务器上停留 5 分钟,对吗?
  • 此用户列表将用户名映射到连接 ID。当我们的后端服务(在另一台机器上)用用户名而不是连接 ID 发送回消息时,这很有用。
0 投票
1 回答
3959 浏览

angular - 协商请求期间出现 Angular SignalR 错误

我们正在尝试将 SignalR 与 Angular 2 和 TypeScript 一起使用。看来我的客户端代码不起作用,尤其是建立连接(没有生成的代理)

使用 SignalR 遵循 Angular 2 TypeScript,但我没有包含 SignalR/Hubs 脚本路径,因为我没有自动生成的代理,因为我没有看到为我创建的任何自动生成的代理类。还参考了 SignalR 文档使用 Javascript 编写的代码

我们使用 windows 身份验证和 Visual Studio 2015、Windows 7、IIS Express

我收到这个错误

协商请求期间出错。

集线器类

Asp.Net WebAPI 启动

角码

包.Json

笔记:

"@types/jquery": "^3.2.16" 引入了最新的打字稿更新,我开始遇到更多问题,所以我只为打字而降级

在控制台中,我看到这个请求的 URL 的200响应代码http://localhost:58965/signalr/negotiate?clientProtocol=1.5&connectionData=%5B%7B%22name%22%3A%22serverrefreshhub%22%7D%5D&_=1509976299819

0 投票
1 回答
861 浏览

asp.net - SignalR2 OnConnected 没有按照文档工作

下面是我SignalR根据ASP.Net 文档编写的实现代码,我使用手动代理创建方法。我只能看到发生协商并收到连接 ID。

OnConnected当我开始连接时,我看不到集线器中的方法被执行。根据文档中的注释部分,我在调用 start 方法之前附加了事件处理程序

SignalR 集线器

启动.cs

Javascript 客户端代码

文档中的注释部分

start通常,您在调用建立连接的方法之前注册事件处理程序。start如果您想在建立连接后注册一些事件处理程序,您可以这样做,但您必须在调用方法之前至少注册一个事件处理程序 。原因之一是应用程序中可能有许多 Hub,但OnConnected如果您只使用其中一个 Hub,您不希望在每个 Hub 上触发事件。建立连接后,集线器代理上存在客户端方法就是告诉 SignalR 触发OnConnected事件的原因。如果您在调用方法之前没有注册任何事件处理程序start,您将能够调用 Hub 上的方法,但 Hub 的OnConnected 方法不会被调用,也不会从服务器调用任何客户端方法。

我无法弄清楚过去两天我错过了什么。

更新

即使我尝试通过包含<script src="~/SignalR/hubs"以下客户端代码来使用自动生成的代理类。仍然 OnConnected 未解雇

连接后的控制台日志

在此处输入图像描述