【问题标题】:When SignalR made 8-10 connections at a time live chat doesn't work当 SignalR 一次建立 8-10 个连接时,实时聊天不起作用
【发布时间】:2012-05-03 06:22:30
【问题描述】:

我正在使用 SignalR 开发实时聊天。这是一个很棒的图书馆。但是我解决了一个我有一段时间无法解决的问题。因此,当 signalR 一次建立 8-10 个连接时,实时聊天不再起作用。也许是 b/c 我在本地机器上运行所有东西?

我想也许我在某个地方犯了错误。所以我找到了最简单的聊天。你可以下载它here。 我在10个窗口中打开它,它不再工作了。是 signalR 的性能问题还是程序员的错误?我怎样才能让它更快地工作?

我还找到了 JabbR chat 。它有live demo,它适用于很多人。他们没有做任何特别的事情,而且效果很好。

有人可以帮忙解决这个问题吗?

非常感谢您的帮助, 迪玛。

【问题讨论】:

  • 您在哪个网络服务器上测试?
  • 我正在开发 .net 应用程序,所以我使用 Development ASP.NET Server。
  • 问题可能是达到了最大并发连接数。尝试使用 iis express
  • 在始终使用 IIS Express 的 vs 2011 中运行。一样的问题。我打开 10 个标签不多。 10 个选项卡如何达到 ASP.NET 默认设置的 5000 个并发连接。也许我可以试试别的?
  • 实时聊天不再起作用是什么意思?你得到异常或任何错误记录?您的应用程序的健康状况如何?

标签: c# .net asp.net-mvc-3 signalr


【解决方案1】:

您可能遇到了两个问题:

  1. Windows 7 上的 IIS/Cassini 具有 10 个并发连接的默认限制。尝试在 Windows Server 上运行测试,看看它的行为是否相同。
  2. 尝试在单独的浏览器窗口和/或单独的浏览器和/或机器中打开连接,不是标签。我注意到在 0.4 中使用标签时可能会出现问题。

【讨论】:

  • 您也可以在 Windows 7 上使用 iis express。它没有这些限制。
  • @davidfowl ,我只有在打开多个标签时才会遇到这个问题,但在一个标签内它工作得很好。请给我一些关于这方面的信息,谢谢
  • 当您不使用 websockets 时,您可以打开到特定集线器的并发连接数是有限制的。
  • 我为 IIS 启用了 websockets,并且我在 aspnet.Config 文件中增加了对 CPU 的并发请求,然后我也面临同样的问题。当我检查 Fiddler 时,请求没有到达服务器,它被冻结(没有得到任何响应)。网址看起来像这样localhost/Microcare/signalr/start?transport=webSockets .....
【解决方案2】:

找到解决方法:

重写connectionId,因此在每个选项卡中,您将拥有相同的连接ID:

 public class MyConnectionFactory : IConnectionIdGenerator
    {
        public string GenerateConnectionId(IRequest request)
        {
            return MyUserManager.Instance.CurrentUserID.ToString();
        }
    }

添加到 global.asax:

GlobalHost.DependencyResolver.Register(typeof(IConnectionIdGenerator), () => new MyConnectionFactory());

我设法以马赫标签打开,尽我所能。所有标签都会收到通知。

希望,这有帮助。

【讨论】:

  • 我不这么认为。每个连接的连接 ID 必须是唯一的,否则一切都会崩溃:stackoverflow.com/questions/11522090/…
  • 我在 Chrome 和 FF 上测试了这个,在同一个 ConnectionId 下打开,有几个打开的选项卡,每个选项卡都从 signalR 获取通知。如果你能解释一下,我什么时候必须预料到问题? '因为我将继续使用这个解决方法,'因为它现在可以工作了......谢谢。
  • 在我的测试中,对多个连接使用相同的连接 ID(例如打开多个选项卡或浏览器窗口时)会导致立即断开连接。如果您没有遇到这种情况,这可能是 Chrome 和 FF 中使用的 Server-Sent-Events 传输的副作用。正如 dfowler(SignalR 的创建者)在我链接的问题中提到的那样,连接 ID 必须是唯一的。这也是他在即将发布的 SignalR 版本中去掉IConnectionIdGenerator 的原因,所以生成重复的 id 是不可能的。
  • 那么,如果用户打开多个选项卡,这意味着我们不能使用 SignalR?.. 我使用 IIS8,如果我们使用唯一的 connectionid,也会出现问题。那是可悲的。也许我们可以在 ServicePointManager 的帮助下做一些事情,但我还没有弄清楚。
  • 问题是,它在 IE9 下也能正常工作,甚至在 IIS7 下也是如此。这很奇怪......通常,我试图弄清楚为什么某些东西不起作用,但现在我试图弄清楚它为什么起作用......)
猜你喜欢
  • 1970-01-01
  • 2021-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-04
  • 2018-09-15
  • 1970-01-01
相关资源
最近更新 更多