2011-04-06 76 views
0

我正在编写视频cms,并希望所有用户在进入时立即显示新资产。 如果我是正确的,那么facebook会实时更新其墙上页面。所以当我发布一些东西给朋友时,它立即显示在他的墙上。正如他们所说,实时网络。 我想知道你是怎么做到的?不是客户端 - 服务器通信的技术,而是服务器上发生的事情。 我了解观察者模式的原理。 但墙壁实际上是一个消息表上的查询。 观察者如何知道用户感兴趣的查询? 它是否包含所有连接用户的所有查询,并在新内容出现时重新执行它。 我相信Google即时可以这样工作。 谢谢你帮助我。C#观察者模式消息过滤

回答

1

当您打开Facebook时,请在浏览器中打开脚本时间表以查看页面上正在执行的脚本。您会注意到每秒执行一次轮询脚本。因此,页面每秒钟查看缓存几次,以查看是否有任何可以显示的新信息。

http://www.ajaxwith.com/Poll-vs-Push-Technology.html - 这应该给你一个关于这个问题的背景。

+0

谢谢你的回应。您的建议称为轮询,并导致许多不必要的服务器和网络过载。我在想服务器推送技术。但是现在我不知道在客户端过滤数据时使用什么样的模式。 – Erik 2011-04-06 21:27:07

1

Facebook使用AJAX和JavaScript计时器在后台轮询查找任何已更改的内容。其他网站使用相同类型的功能来更新嵌入在页面中的股票报价等。它不是真正立即更新,它的更新频率与JavaScript计时器到达其服务器的频率相同。这是因为网络浏览器使用HTTP,这是一个请求/响应协议。浏览器不会显示任何不是对浏览器发起的请求的直接回应;没有办法只从您的网络服务器直接发送内容到浏览器。

+0

是的!你可以使用websockets。好的,并非所有的浏览器都支持这一点,但我的客户确实;-) – Erik 2011-04-06 21:29:50

+0

好吧,想象我的客户端都有一个运行连接的c#应用程序,让我们说一个服务器的wcf服务。我想让它们保持最新状态。这可以通过观察者模式完成,因为他们知道他们没有打开简单的列表,但是搜索结果等。 – Erik 2011-04-06 21:33:10

+0

你仍然需要进行民意调查。 WCF服务不会推送数据,它会在发出请求时返回数据。从技术上讲,你可以保持一个回调通道打开,并有很长的超时时间(我认为最大值约为24天),并发送数据,但根据我的经验,这并不是特别可靠。如果服务器到达客户端时遇到问题,它将关闭通道,但您的客户端应用程序不知道,也不会尝试重新初始化连接。 – 2011-04-06 21:45:53