我有一个基于javascript的客户端,目前正在为新内容轮询.NET Web服务。虽然轮询工作......我对这种方法不满意,因为我正在使用系统资源并在没有任何接收更改时创建开销。
我的问题是如何通知我的客户有新的内容供它显示?我愿意接受任何其他技术来实现这个解决方案。
答案 0 :(得分:7)
首先,投票是可行的方法。您可以使用Flash或Silverlight或Comet - http://en.wikipedia.org/wiki/Comet_(programming)来执行此操作,它可以为您提供通知的tcp连接。 网页本身无法保持套接字打开,因此无法直接通知网络客户端。
<强> [编辑] 强>
但是考虑一下,有多少客户端可以一次向一台服务器保持tcp连接?对于更大的系统,由于有65k端口可用,因此可用的插槽很快就会耗尽。
您的服务器可以处理多少并发连接取决于您的硬件资源。如果你有足够的内存和CPU,你应该能够处理~100k甚至更多。但是,如果每个请求通过tcp / ip访问数据库或其他资源,则可能限制为每个可用IP的端口数(65k)。您还应该推送请求针对单独的域,因为浏览器通常会限制每个域的两个并发连接,因此您不会干扰正常的页面加载。
将轮询与前端缓存服务器结合使用是一个很好的解决方案。您可以在服务器上使用逻辑来更新每个客户端的缓存,从而减少每个轮询的负载。您可以为在X分钟内登录/轮询的用户更新缓存,以进一步减少缓存更新。对我来说,实施拉动比拉动更容易,技术明智。
答案 1 :(得分:2)
答案 2 :(得分:2)
查看WebSync,这是.NET / IIS的彗星解决方案。它会完全满足您的需求。没有额外的轮询浪费资源,仅在需要时推送,实时更新......整个9码。
答案 3 :(得分:1)
http://www.ape-project.org/我认为这是一个值得你去看的好地方。它基于ajax推送或者有些人称之为反向ajax。还有其他项目,它基于:http://en.wikipedia.org/wiki/Comet_(programming)
我提到了ape项目,因为你可以在它上面使用JavaScript,或者如果你想在服务器端使用C ++,PHP,Python等。 : - )
答案 4 :(得分:1)
您已经被告知过HTTP轮询(COMET)。这就留下了一个问题: http服务器本身(IIS + ASP)如何在不轮询数据库的情况下检测数据库中的更改。使用SQL Server,您可以使用Query Notifications之类的技术,当您缓存的记录在数据库中发生更改时,可以通知您的ASP.Net进程。您还可以查看允许查询通知与LINQ查询混合的LinqToCache项目。