【问题标题】:C# observer pattern message filteringC#观察者模式消息过滤
【发布时间】:2023-03-20 23:15:01
【问题描述】:

我正在编写一个视频 cms,并希望我的所有用户在他们进入时立即显示新资产。 如果我是对的,facebook 会实时更新其墙页。因此,当我向朋友发布某些内容时,它会立即显示在他的墙上。正如他们所说,实时网络。 我想知道你是怎么做到的?不是客户端-服务器通信的技术,而是服务器上发生的事情。 我理解观察者模式的原则。 但是一堵墙实际上是对消息表的查询。 观察者如何知道用户感兴趣的查询? 它是否保存所有已连接用户的所有查询并在有新内容出现时重新运行它。 我相信 Google-realtime 就是这样工作的。 谢谢你帮助我。

【问题讨论】:

    标签: c# design-patterns observer-pattern


    【解决方案1】:

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

    http://www.ajaxwith.com/Poll-vs-Push-Technology.html - 这应该为您提供有关该主题的背景。

    【讨论】:

    • 感谢您的回复。您的建议称为轮询,会导致大量不必要的服务器和网络过载。我在考虑服务器推送技术。但我现在不知道在客户端过滤数据时使用什么模式。
    【解决方案2】:

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

    【讨论】:

    • 是的,有!您可以使用网络套接字。好的,并非所有浏览器都支持,但我的客户支持 ;-)
    • 好吧,想象一下我的客户都有一个正在运行的 c# 应用程序,比如说一个连接到服务器的 wcf 服务。我想让他们保持最新。这可以用观察者模式来完成吗,知道他们没有打开简单的列表,而是搜索结果等。
    • 你仍然需要投票。 WCF 服务不会推送数据,它会在发出请求时返回数据。从技术上讲,您可以通过很长的超时时间(我认为最大值约为 24 天)保持回调通道打开并通过它发送数据,但根据我的经验,这并不是特别可靠。如果服务器在到达您的客户端时遇到问题,它会关闭通道,但您的客户端应用程序不知道,并且永远不会尝试重新初始化连接。
    • 我的问题不是关于客户端和服务器之间通信的技术。我将使用 HTML5 websockets。 websockets 中不涉及轮询。服务器可以随时决定向客户端发送一些东西。我的问题实际上是关于如何在服务器上处理它。例如,如何使客户显示的搜索结果保持最新?我应该在服务器端使用什么模式?
    • 由于 WebSockets 只发送原始数据,看起来最合适的应该是命令模式,您可以在客户端序列化命令,在服务器上反序列化它,它会包含与客户想看到什么。您可能希望在客户端跟踪您的请求,以便稍后取消订阅,这将是需要在服务器端处理的不同命令。
    猜你喜欢
    • 1970-01-01
    • 2021-11-22
    • 2016-02-20
    • 2023-04-10
    • 1970-01-01
    • 2012-02-15
    • 2013-12-30
    • 2011-05-15
    • 2019-11-23
    相关资源
    最近更新 更多