2012-05-03 45 views
2

我正在使用SignalR开发实时聊天。这是伟大的图书馆。但是我应付了一段时间内无法解决的问题。所以当signalR一次8-10个连接时,实时聊天的问题不再起作用。也许这是B/C我在本地机器上运行的一切?当SignalR每次连接8-10个连接时,实时聊天不起作用

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

我还发现JabbR chat。它有live demo,它适用于很多人。他们没有做任何特别的事情,而且工作得很好。

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

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

+0

您正在测试哪个Web服务器? – Ramesh

+0

我正在开发.net应用程序,因此我使用Development ASP.NET Server。 – F0rc0sigan

+1

问题可能是达到了最大并发连接数。尝试使用iis express – Ramesh

回答

4

有你可能已经遇到了两个问题:

  1. IIS /卡西尼号上的Windows 7有10个并发连接一个默认限制。尝试在Windows Server上运行测试,看看它的行为是否相同。
  2. 尝试在单独的浏览器窗口和/或单独的浏览器和/或机器上打开连接,而不是标签。我注意到在使用标签页时,0.4的东西可能会搞砸。
+1

您也可以在Windows 7上使用iis express。它没有这些限制。 – davidfowl

+0

@davidfowl,我只有当我打开多个选项卡时出现此问题,但在一个选项卡内工作得很好。 可以请你给我一些关于这方面的信息,谢谢 –

+1

当你不使用网络套接字时,你可以打开一个特定集线器的并发连接数有限制。 – davidfowl

0

找到如何解决办法:

重写的ConnectionId,所以在每一个标签,你就会有相同的sonnection ID:

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

添加到Global.asax中:

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

我尽可能地打开了标签页。所有标签都会收到通知。

希望,这有帮助。

+0

我不这么认为。连接ID需要每个连接唯一或一切破裂:http://stackoverflow.com/questions/11522090/signalr-how-is-a-duplicate-connection-id-handled –

+0

我测试了这一点,在Chrome和FF下打开相同的ConnectionId和几个打开的选项卡,每个选项卡都从signalR获取通知。如果你能解释,当我必须预料到问题时? '因为我会留下这个解决方法',因为它现在可行。谢谢。 – Dmitry

+0

在我的测试中,对多个连接使用相同的连接ID(例如打开多个选项卡或浏览器窗口时)会导致立即断开连接。这可能是Chrome和FF中使用的Server-Sent-Events传输的副作用,如果这种情况没有发生在您身上。由于dfowler(SignalR的创建者)在我已链接的问题中提到,连接ID必须是唯一的。这也是他从即将推出的SignalR版本中删除IConnectionIdGenerator的原因,因此不可能产生重复的id。 –