【问题标题】:Possible to do client-side HTTP push?可以进行客户端 HTTP 推送吗?
【发布时间】:2010-11-06 07:24:06
【问题描述】:

几乎与服务器端推送相反,也称为Comet。我想知道是否可以使用长寿命 HTTP 连接将信息推送到服务器。

与简单的 XHR 不同,连接将保持活动状态,并且随着用户完成操作等,数据会定期流式传输到服务器。

使用标准技术我认为这是不可能的,但我愿意接受有关可能的利用或实现此目的的巧妙方法的建议。目的是完成向服务器的低延迟数据推送,以实现快速高效的单向流式传输。

我对使用带有 flash/java 桥的套接字实现不感兴趣,因为提供跨域策略或获取 java 签名很麻烦。欢迎在没有额外依赖的情况下工作的粗略黑客攻击。最好使用javascript完成解决方案。

【问题讨论】:

  • 没有太多的原因。由于 HTTP1.1 重用连接,一旦第一个连接建立,后续的连接速度非常快;标准 AJAX 技术解决了这个问题,没有任何与在服务器上维护长期连接、处理连接故障等相关的问题。

标签: javascript ajax http streaming comet


【解决方案1】:

这可以通过以下几种方式之一来完成...

您可以keep a connection open 并进行 POST,或者我确信可以进行多部分 POST。

【讨论】:

  • 不,绝对不一样。
  • 问题是关于发送一些数据,然后在不开始新的 HTTP 请求的情况下发送更多数据——即。不仅仅是普通的 POST。
  • 您可以保持连接打开,是否可以执行多部分 GET 请求?这两种情况中的任何一种都可以正常工作。
  • 怎么样?这是在 JavaScript 中,所以手动管理套接字已经过时了。
  • 它更难做,但并非不可能。
【解决方案2】:

我曾经看过http://orbited.org/背后那个人的演讲

这是一个 js 库,它使用标准技术来保持服务器和客户端之间的连接打开,您可以向下推送内容。

【讨论】:

  • 完全符合我的要求,但如果它可以在标准端口 80 上工作会更好。
  • 这是一个抽象的连接,但最终可能会使用多个 HTTP 请求(每条消息最多一个)。但它可以在 80 端口上运行(当然,不能在与 Web 服务器相同的 IP 上)。
【解决方案3】:

这样做: http://www.speich.net/projects/programming/firebug-testing.php

看看这个:http://en.wikipedia.org/wiki/Comet_(programming)) 并在谷歌周围搜索“x-mixed-replace”

在 Firefox 上执行 XHR。必须直接使用它或抓取 XHR 对象来设置有趣的字段。 xhr.multipart=true 并使用 onload 处理程序,而不是 onreadystatechange。

服务器应返回 mime 类型为“multipart/x-mixed-replace”的数据。加上一个多部分分隔符。刷新以获取每个齐射的最后一个字节。我还在努力让它顺利。

Safari (~=chrome) 可以做到,但细节不同。当 readyState=3 而不是 4 时调用您的处理程序。并且每次将新文本附加到 resultText,而不是全部单独。无法在 IE 上运行任何东西。

【讨论】:

    【解决方案4】:

    如果您正在寻找双向浏览器-服务器通信,您可能正在寻找WebSockets。有关可用的实现,请参阅 Wikipedia 文章的底部。

    【讨论】:

    • 谢谢 :) 这是 3 年前的事了,当时的套接字还没有今天那么远。
    猜你喜欢
    • 2011-07-30
    • 2016-07-26
    • 1970-01-01
    • 1970-01-01
    • 2020-08-22
    • 1970-01-01
    • 2011-12-23
    • 2012-01-13
    • 1970-01-01
    相关资源
    最近更新 更多