【问题标题】:What's the best way for the server to send messages to a web client?服务器向 Web 客户端发送消息的最佳方式是什么?
【发布时间】:2010-10-13 09:58:14
【问题描述】:

文章的链接也将不胜感激——我不知道要搜索的术语。

我希望了解 Web 应用程序如何支持服务器到客户端的通信。我知道网络不是为此而设计的,并且它一直是一个障碍,我只是想知道这是什么状态,以及最佳实践是什么。

另一种方法是通过 ajax 进行持续或偶尔轮询,但 Web 服务器是否可以保持与 Web 客户端的有状态连接?

编辑:问这个问题的另一种方法是 StackOverflow 如何告诉页面有新帖子可供它在顶部显示那个小条?

【问题讨论】:

  • 您能否向我们提供有关您正在尝试做什么的更多信息。我很欣赏这是一个有效的“一般”问题,但您的具体情况(如果有的话)将有助于指导答案。例如,你是在写一个 SO 竞争对手的网站 ;-) 还是一个即时通讯客户端?
  • 大声笑不,不是这样的竞争对手。基本上,我正在尝试通过网络、多个连接或至少调查它的可能性来实现一种“数据绑定”功能。

标签: asp.net javascript asp.net-mvc ajax web-applications


【解决方案1】:

StackOverflow 轮询服务器以检查是否还有更多数据。

你要找的是Comet

【讨论】:

  • 啊,是的,这敲响了警钟——长期运行的请求。这样做的问题是它创建了一个永久加载网页的外观。我个人觉得那些很糟糕。
【解决方案2】:

要从浏览器获得真正的双向通信,您需要使用 Silverlight、Flash 等插件技术。这些插件可以创建可以与服务器套接字建立双向持久连接的 TCP 连接。请注意,您无法真正与 HTTP 服务器建立 TCP 连接,因此您必须创建一个额外的服务器代理来与浏览器进行通信。

基本上,它与 Stackoverflow、Gmail 等 AJAX 网站使用的部署模型完全不同。它们都依赖于浏览器以设定的时间间隔轮询服务器。

【讨论】:

  • 引人入胜的概念!您是否认为可以编写一个不可见的 flash 组件来建立 tcp 连接,并且根据来自服务器的消息,可能会导致页面的某些部分更新?
  • 是的,虽然 Flash 插件必须已经安装。在这种情况下,我对 Silverlight 的了解更多,您绝对可以按照您的描述进行操作,因为它与托管页面的 HTML 有很好的挂钩。 Silverlight 也可以使用 C#,而 Flash 是 ActionScript (yuk)。
  • 是的,从开发的角度来看,Silverlight 绝对是更有吸引力的选择,但我正在考虑采用率。
【解决方案3】:

Web 浏览器确实无法处理这种通信。通信是单向通道,Web 服务器在端口(通常为 80 或 443)上侦听以获取要发送给它的信息。

我刚刚阅读了comet 上的链接,这是一种有趣的方法,但必须记住的是,从技术上讲,它仍然是由客户端打开的。服务器正在发送代码供其执行,但浏览器最终控制并确定服务器何时与其通信。

使用当今的网络浏览器,如果没有浏览器的帮助,服务器在技术上永远无法执行发送给它的消息。从技术上讲,您可以通过在客户端计算机上执行一些 Active X 控件来解决这个问题……但我还没有尝试过。

【讨论】:

    【解决方案4】:

    你不能,HTTP 是无状态的。很久以前,Netscape 实现了 HTTP Push,但并不成功。

    我会使用网络服务或类似服务进行轮询;没有插件(即 Flash、Java、Silverlight)在其沙箱中有权使用原始套接字,因此尝试以这种方式实现它会浪费时间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-05
      • 2016-10-27
      • 2017-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多