首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WCF Comet实现

WCF Comet实现
EN

Stack Overflow用户
提问于 2011-08-12 11:16:19
回答 2查看 1.5K关注 0票数 1

我有一个需求,需要在Web上进行实时更新(ASP.NET MVC)。唯一能扭转现状的方法是实现COMET技术(ServerPush/Reverse)技术。

场景是:用户A将消息保存在不同的网站客户端中。然后,用户B将自动获取用户"A"在不同浏览器中所做的更新。

实际上,我通过这个体系结构完成了解决方案:ASP.NET MVC -在WCF上执行jquery (post)请求(长池)。WCF -在数据库( Server)上做一些轮询,间隔1秒。如果已将新数据添加到数据库中,则轮询将与客户端上返回的数据中断。

WCF彗星方法伪码:

代码语言:javascript
复制
 private Message[] GetMessages(System.Guid userID)
 {
      var messages = new List<Message>();
      var found = false;
      /* declare connection, command */
      while (!found )
      {
           try
           {
                /* open connection - connection.Open(); */
                /* do some database access here */
                /* close connection - connection.Close(); */
                /* if returned record > 0 then process the Message and save to messages variable */
                /* sleep thread : System.Threading.Thread.Sleep(1000); */
                found = true;
           }
           finally
           {
                /* for sure, incase of exception */
                /* close connection - connection.Close(); */
           }
       }
       return messages.ToArray();
 }

我的关注和问题是:是否是在WCF (间隔1秒)中执行轮询技术的最佳方法?

原因:我最大限度地使用了数据库连接池,并且我期望这种技术没有问题。

注释:--这是一个多线程实现,下面使用WCF给定的属性。

代码语言:javascript
复制
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall), ConcurrencyMode = ConcurrencyMode.Multiple, UseSynchronizationContext = true)]
EN

回答 2

Stack Overflow用户

发布于 2011-08-14 09:12:46

我建议使用专用的实时服务器(即,不要在IIS中承载WCF服务)或使用托管服务进行实时更新。正如安德斯所说,IIS并不擅长处理多个长期运行的并发请求。

我还建议您考虑使用一种使用WebSockets的解决方案,该解决方案支持辅助解决方案,如Flash、HTTP流、HTTP长轮询以及可能的轮询。WebSockets是客户端和服务器之间全双工双向通信的第一种标准化方法,最终将为任何此类问题提供更好的解决方案。

就目前而言,实现自己的Comet/WebSocket实时解决方案肯定是一项耗时的任务(正如您可能已经发现的那样),特别是在构建一个面向公共的应用程序时,用户可以使用多种不同的浏览器访问它。

考虑到这一点,XSockets项目看起来非常有趣,SuperWebSocket项目也是如此。

我所知道的.NET Comet解决方案来自FrozenMountain,它有一个用于IIS的WebSync服务器。还有PokeIn

我已经编译了一个实时web技术列表,它可能也很有用。

票数 4
EN

Stack Overflow用户

发布于 2011-08-12 12:24:21

不是轮询数据库,而是在更新时发送事件吗?无论如何,这就是我实现Pub/Sub场景的方式,而且它工作得很好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7039298

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档