2009-07-23 57 views
4

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

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

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

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

回答

1

我才发现自己this article,它描述了以下技术(这是我在这个问题提到):

...在客户端做一个HTTP请求 并让服务器保持请求 直到有一条消息 推送。如果TCP/IP连接是 丢失或超时,客户端将 发出一个新的HTTP请求,并且延迟 将只是 请求/响应对的往返时间。 。 。这种模式 有效需要两个TCP/IP的HTTP连接 ,客户 服务器,虽然没有永久的和 因此移动友好

1

您可能想查看this project,其中使用了各种技术,包括Comet。​​,这里是从该页面

这是我非常高兴能够 公布显示,我一直在努力 在我的业余时间,在过去一个月 项目的 首次公开片段二,全新的基于Web的IRC聊天 应用程序。

这个项目汇集了很多 新技术必须是 开发,使这是一个可行的, 可扩展和高效。

一些基本工具,建立以 使这个更多钞票,我认为 “不够稳定”已经发布, 如php Socket Daemon library 我写要能够应付 数百多达数千 “ Comet“http连接,以及相等数量的IRC客户端连接。

0

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

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

我认为它会更容易发送短信/短信,并有一个应用程序来处理它。