C#观察者模式消息过滤

C#观察者模式消息过滤,c#,design-patterns,observer-pattern,C#,Design Patterns,Observer Pattern,我正在写一个视频cms,希望我的所有用户都能在他们进来时立即显示新的资产。 如果我是对的,facebook会实时更新它的网页。所以当我给朋友发东西时,它会立即显示在他的墙上。正如他们所说,实时网络。 我想知道你是怎么做到的?不是客户机-服务器通信技术,而是服务器上发生的事情。 我理解观察者模式的原理。 但墙实际上是对消息表的查询。 观察者如何知道用户感兴趣的查询? 它是否保存所有已连接用户的所有查询,并在出现新内容时重新运行它。 我相信谷歌实时就是这样工作的。 感谢您的帮助。打开facebook

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

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


-这应该给你一个关于这个主题的背景。

Facebook使用AJAX和JavaScript定时器,在背景中轮询任何更改。其他网站使用相同类型的功能来更新嵌入在页面中的股票报价,等等。它并不是立即更新,而是随着JavaScript定时器点击其服务器而频繁更新。这是因为web浏览器使用HTTP,这是一种请求/响应协议。浏览器不会显示任何不作为对浏览器发起的请求的直接响应的内容;无法从Web服务器直接将内容发送到浏览器。

感谢您的回复。您的建议称为轮询,它会导致大量不必要的服务器和网络过载。我在考虑服务器推送技术。但我现在不知道在客户端过滤数据时使用什么模式。是的,有!您可以使用WebSocket。好的,不是所有浏览器都支持这一点,但我的客户机支持;-)好的,假设我的客户机都有一个运行的c#应用程序,该应用程序与wcf服务连接到服务器。我想让他们保持最新。如果知道他们没有打开简单的列表,但是打开了搜索结果等,那么使用observer模式可以做到这一点吗?你仍然需要投票。WCF服务不推送数据,而是在发出请求时返回数据。从技术上讲,您可以在很长的超时时间内(我认为最大超时时间约为24天)打开回调通道,并通过该通道发送数据,但根据我的经验,这并不特别可靠。如果服务器在连接到您的客户端时遇到问题,它会关闭通道,但您的客户端应用程序不知道,并且从不尝试重新初始化连接。我的问题不是客户端和服务器之间的通信技术。我将使用HTML5 WebSocket。而且WebSocket中不涉及投票。服务器可以随时决定向客户端发送内容。我的问题实际上是关于如何在服务器上处理它。例如,如何保持客户端显示的搜索结果是最新的?我应该在服务器端使用什么模式?因为WebSockets只发送原始数据,所以看起来最适合的模式应该是命令模式,在客户端上序列化命令,在服务器上反序列化命令,它将包含与客户端希望看到的内容相关的所有内容。您可能希望在客户机上跟踪所请求的内容,以便以后可以取消订阅,这将是另一个需要在服务器端处理的命令。