推动或轮询

时间:2011-03-23 15:27:28

标签: c# .net silverlight wcf

我有一个SL客户端和一个WCF服务。客户端每4秒轮询一次WCF,我一次有近100个客户端。

Web服务器是具有512 MB RAM的入门级服务器。

我想知道,如果轮询取决于服务器配置,如果我增加服务器配置,那么客户端的轮询会更好吗?

第二,推动(双工)会比投票更好吗?我从阅读的博客中得到了一些反应。

此外,优化轮询以便在客户端更快地响应的最佳做法是什么?我的应用程序需要实时数据

由于

2 个答案:

答案 0 :(得分:3)

我的猜测是你有某种竞争条件只有大量客户才出现。您为WCF服务使用哪些并发和实例化模式? (请参阅MSDN:http://msdn.microsoft.com/en-us/library/ms731193.aspx处的WCF会话,实例化和并发)

如果您“丢失”回复,我要做的第一件事就是开始记录或跟踪服务器上发生的事情。例如,当客户端“看不到”响应时,服务器是否收到请求? (如果是这样,会发生什么,等等)

我还会关注内存使用情况 - 你没有说你正在使用什么操作系统,但这些天512 MB是非常瘦的。如果你遇到了交换磁盘的情况,那显然不是一件好事。

最后,假设您的服务受CPU限制(即没有繁重的数据库和文件系统调用),提高吞吐量的最佳方法可能是减少消息有效负载(线路大小),使用最高性能的绑定(即如果客户端是.NET并且您控制它,NetTcp绑定比HTTP快得多),当然,多线程您的服务。恕我直言,你提供的信息 - 以及所有其他条件相同 - 民意调查可能很好,推动可能会使事情变得更加复杂。如果这很重要,那么您真的希望为问题带来真正的工程方法,并确定/衡量您的瓶颈。

希望这有帮助!

答案 1 :(得分:1)

“推送”通知通常具有较低的网络开销,因为在没有任何通信时不会发送流量。但是“拉”通知通常具有较低的应用程序开销,因为当客户端只是空闲等待通知时,您不必维护状态。

推送通知也往往“更快”,因为客户端会在事件发生时立即得到通知,而不是等待下一个轮询间隔。但拉动通知更灵活 - 您可以使用任何您想要的服务器或协议,并且只需将轮询等待间隔加倍即可将客户端容量增加一倍。