【问题标题】:How do I create a chat server that is not driven by polling?如何创建不由轮询驱动的聊天服务器?
【发布时间】:2010-11-13 11:14:31
【问题描述】:

我创建了一个由客户端轮询驱动的简单聊天服务器。客户端每隔几秒钟发送一次数据请求,并收到任何新消息以及有关其对等方是否仍处于连接状态的信息。

由于客户端在移动平台 (iPhone) 上运行,我一直在寻找摆脱轮询的方法,因为轮询会很快耗尽电池电量。我已经读过可以无限期地保持 http 连接打开,但还没有理解如何在实践中使用这种技术。我也想知道这样的连接是否足够稳定,可以在移动环境中使用。

理想的情况是服务器仅在发生影响客户端的事件(例如,对等方发布消息或离线)时才向客户端发送数据。

是否建议尝试通过 http 完成此操作,或者我必须通过 tcp 编写自己的协议?根据我的需要定制 xmpp 有多难(我的聊天服务器有一些我必须轻松实现的特殊功能)。

【问题讨论】:

    标签: http networking chat xmpp instant-messaging


    【解决方案1】:

    【讨论】:

    • 是的,这就是我的想法,Russell L 链接到的讨论也很有帮助。谢谢。
    【解决方案2】:

    我认为您是在描述 XMPP 而不是 BOSH。

    http://xmpp.org/extensions/xep-0206.html

    我在非移动设备上的聊天服务器和 javascript 客户端之间使用了这种 http 绑定方法。对我来说效果很好。

    【讨论】:

      【解决方案3】:

      您可能想查看this project,它使用了包括 Comet 在内的多种技术。 Release details are here,这是该页面的 sn-p

      很高兴能够 宣布首次公开展示 我一直在做的一个项目 在上个月的空闲时间或 二、新的Web Based IRC聊天 应用。

      这个项目汇集了很多 必须采用的新技术 开发使其成为可行的, 可扩展且高效。

      一些基础工具构建为 使我认为这成为可能 “足够稳定”已经发布, 比如php Socket Daemon library 我写信是为了能够处理 数百到数千 “彗星” http 连接,以及一个相等的 IRC 客户端连接数。

      【讨论】:

        【解决方案4】:

        我自己刚刚找到this article,它描述了以下技术(我在问题中提到了):

        ... 让客户端发出 HTTP 请求 并让服务器保留请求 在队列中,直到有消息 推。如果 TCP/IP 连接是 丢失或超时,客户端将 发出一个新的 HTTP 请求,以及延迟 只会是往返时间 请求/响应对。 . .这个模型 有效地需要两个 TCP/IP HTTP 连接,客户端到 服务器,虽然没有永久的和 因此对移动设备友好

        【讨论】:

          【解决方案5】:

          我认为这几乎是不可能的和危险的。互联网是无状态和无连接的,这意味着客户端和服务器之间的连接总是被视为不可靠的。这不是为了好玩。

          通过尝试建立有状态的连接,您正在引入新问题。特别是来自 3g 应用程序。如果连接中断怎么办?您无法控制服务器,也无法推送。

          我认为发送短信/文本消息并拥有一个处理它的应用程序会更容易。

          【讨论】:

          • 我确实似乎有很多人使用 Cometish 方法(BOSH 等)成功地使用了它。如果连接中断......你建立一个新的?听到更多关于您为什么认为这几乎是不可能的信息会很有趣。
          猜你喜欢
          • 2011-08-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-12-26
          • 1970-01-01
          • 2014-01-29
          相关资源
          最近更新 更多