我正在编写视频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. 观察者模式
- 5. 实现C++ -to-lua观察者模式?
- 6. C++“双向”观察者模式
- 7. 与观察者模式
- 8. asp.net观察者模式
- 9. 观察者模式vs MVC
- 10. 观察者模式类(JAVA)
- 11. 观察者模式混淆
- 12. python观察者模式
- 13. MVC和观察者模式
- 14. 异步观察者模式
- 15. Vue.js和观察者模式
- 16. 观察者模式Java - 使用线程的多个观察者
- 17. 观察者模式或其他模式
- 18. 观察者模式vs电抗模式
- 19. 生产者/消费者模式和观察者模式之间的区别
- 20. 观察者/可观察模式的链接
- 21. 使用RxCpp构造观察者/可观察模式
- 22. Java观察者模式问题?
- 23. 设计模式观察者(反向)
- 24. 观察者模式的策略?
- 25. 观察者设计模式和其他
- 26. Python的观察者设计模式
- 27. 秒表的观察者模式
- 28. pygame - 观察者模式错误
- 29. 观察者模式 - 什么时候到
- 30. 松散耦合的观察者模式
谢谢你的回应。您的建议称为轮询,并导致许多不必要的服务器和网络过载。我在想服务器推送技术。但是现在我不知道在客户端过滤数据时使用什么样的模式。 – Erik 2011-04-06 21:27:07