4

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

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

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

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

4

5 回答 5

4

推技术怎么样?见http://en.wikipedia.org/wiki/Comet_(programming)

于 2009-07-23T16:50:46.603 回答
3

我认为您是在通过 BOSH 描述 XMPP。

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

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

于 2009-07-23T17:12:45.483 回答
1

我自己刚刚找到了这篇文章,它描述了以下技术(我在问题中提到了):

...让客户端发出 HTTP 请求并让服务器将请求保留在队列中,直到有消息要推送。如果 TCP/IP 连接丢失或超时,客户端将发出新的 HTTP 请求,延迟将仅为请求/响应对的往返时间。. . 该模型实际上需要两个 TCP/IP 连接用于 HTTP、客户端到服务器,但不是永久的,因此对移动设备友好

于 2009-07-23T16:48:34.003 回答
1

你可能想看看这个项目,它使用了包括 Comet 在内的多种技术。发布细节在这里,这是该页面的一个片段

我非常高兴能够宣布我在过去一两个月的空闲时间一直在做的一个项目的首次公开展示,这是一个新的基于 Web 的 IRC 聊天应用程序。

该项目汇集了许多必须开发的新技术,以使其成为可行、可扩展和高效的。

一些我认为“足够稳定”的底层工具已经发布,例如我编写的php Socket Daemon 库 ,它能够处理成百上千的“Comet”http 连接,以及等量的 IRC 客户端连接。

于 2009-07-23T16:55:22.320 回答
0

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

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

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

于 2009-07-23T16:56:15.797 回答