2013-04-07 28 views
0

我目前正在建设一个SignalR应用程序(使用ASP.Net MVC4,在IIS7与SQL Server 2008 R2快递),供用户输入一个大厅,被放入组然后在不同的页面上进行交互。SignalR 1.01集线器在ASP.Net:跨页存储组信息

就是HTML5 LocalStorage为任何参与者的要求,所以可以存储在客户端组的信息。

我对应用程序的设计与SignalR组成员两个问题:

  1. 什么是存储在服务器上组成员的最佳方式?单身变量,具有组和连接ID的数据库或不同的东西?数据库会成为SQL Server Express和大约100-200用户的问题吗?

  2. 页面更改过程中会发生什么变化并引发火灾?我是否必须手动续订组员成员资格,进行断开/重新连接火警,如果是,我可以区分这种类型的断开与用户离开的好处吗?

回答

1

(1)如果你打算坚持组信息只为一个会议,你应该考虑使用集线器/永久连接类的静态变量来存储有关组的信息(内存的需求情况而定)。例如,连接ID和组之间的字典/映射。重要的是要注意,在应用程序域重新启动或Web场中时,静态不会持久。

为了避免这种情况,你可以简单地存储在数据库中的组信息,而不是关注在应用程序域重新启动失去它。

你也应该看到Chat sample in the SignalR solution - 它使用静态变量来哪个聊天室不同的用户信息

(2)如果你建立从另一页在同一应用程序的新连接,那么连接ID将有所不同。刷新页面时,断开连接事件将触发,并且您将使用不同的ID重新连接。在这些情况下,您需要手动在您的应用中使用会话管理机制将新的连接ID映射到用户。

+0

感谢您的提示,我发现这非常有建设性的和有益的,所以我并没有被这招收盘相信,叹息...... – jank 2013-04-08 12:48:44

+0

这么一堆这里计算器失败者,耍赖编辑答案和复制他人只得到积分。获得生命。 – 2013-04-09 07:07:50

5
  1. 我使用msopentech.redis。一个非常快速的缓存,同时保存您的数据。 (在google上发现大量信息)您可以使用booksleeve(signalr团队也使用它)或servicestack.redis来访问它。这样你就不必把它放在静态变量或缓慢的数据库调用中。

  2. 与同一网站的每个页面的变化,你会收到一个断开和连接。 connectionID将会不同,所以你应该使用某种机制将connectionid映射到登录用户并坚持。这是如果你想能够发送个人消息,而不是广播。

+0

我会检查参考,谢谢。 – jank 2013-04-08 12:47:25