我正在编写视频cms,并希望所有用户在进入时立即显示新资产。 如果我是正确的,那么facebook会实时更新其墙上页面。所以当我发布一些东西给朋友时,它立即显示在他的墙上。正如他们所说,实时网络。 我想知道你是怎么做到的?不是客户端 - 服务器通信的技术,而是服务器上发生的事情。 我了解观察者模式的原理。 但墙壁实际上是一个消息表上的查询。 观察者如何知道用户感兴趣的查询? 它是否包含所有连接用户的所有查询,并在新内容出现时重新执行它。 我相信Google即时可以这样工作。 谢谢你帮助我。C#观察者模式消息过滤
回答
当您打开Facebook时,请在浏览器中打开脚本时间表以查看页面上正在执行的脚本。您会注意到每秒执行一次轮询脚本。因此,页面每秒钟查看缓存几次,以查看是否有任何可以显示的新信息。
http://www.ajaxwith.com/Poll-vs-Push-Technology.html - 这应该给你一个关于这个问题的背景。
Facebook使用AJAX和JavaScript计时器在后台轮询查找任何已更改的内容。其他网站使用相同类型的功能来更新嵌入在页面中的股票报价等。它不是真正立即更新,它的更新频率与JavaScript计时器到达其服务器的频率相同。这是因为网络浏览器使用HTTP,这是一个请求/响应协议。浏览器不会显示任何不是对浏览器发起的请求的直接回应;没有办法只从您的网络服务器直接发送内容到浏览器。
是的!你可以使用websockets。好的,并非所有的浏览器都支持这一点,但我的客户确实;-) – Erik 2011-04-06 21:29:50
好吧,想象我的客户端都有一个运行连接的c#应用程序,让我们说一个服务器的wcf服务。我想让它们保持最新状态。这可以通过观察者模式完成,因为他们知道他们没有打开简单的列表,但是搜索结果等。 – Erik 2011-04-06 21:33:10
你仍然需要进行民意调查。 WCF服务不会推送数据,它会在发出请求时返回数据。从技术上讲,你可以保持一个回调通道打开,并有很长的超时时间(我认为最大值约为24天),并发送数据,但根据我的经验,这并不是特别可靠。如果服务器到达客户端时遇到问题,它将关闭通道,但您的客户端应用程序不知道,也不会尝试重新初始化连接。 – 2011-04-06 21:45:53
- 1. 观察者模式 - 观察者创建
- 2. 观察者模式 - 将信息传递给观察者
- 3. 观察者模式
- 4. 通过RMI实现观察者模式
- 5. C++“双向”观察者模式
- 6. 观察者模式C和Java
- 7. 实现C++ -to-lua观察者模式?
- 8. C中的观察者模式#
- 9. C++和Qt:观察者模式错误
- 10. 最简单的C++支持分布式消息库 - 观察者模式
- 11. 观察者模式-受试者保持到由观察者
- 12. 异步观察者模式
- 13. 实现观察者模式
- 14. 了解观察者模式
- 15. 观察者模式imp
- 16. asp.net观察者模式
- 17. jQuery和观察者模式
- 18. 观察者模式混淆
- 19. MVC和观察者模式
- 20. 与观察者模式
- 21. 观察者模式建议
- 22. 观察者模式类(JAVA)
- 23. Vue.js和观察者模式
- 24. SI +观察者模式
- 25. 观察者模式vs MVC
- 26. python观察者模式
- 27. 带过滤器的观察者模式,在什么级别进行过滤?
- 28. 观察者模式:如何区分观察者
- 29. 具有两个观察者列表的观察者模式
- 30. 观察者设计模式 - 具体主题和观察者
谢谢你的回应。您的建议称为轮询,并导致许多不必要的服务器和网络过载。我在想服务器推送技术。但是现在我不知道在客户端过滤数据时使用什么样的模式。 – Erik 2011-04-06 21:27:07