没有重新加载页面的聊天客户端/帖子

时间:2012-05-20 08:25:58

标签: php javascript ajax chat

我希望创建一个网站,允许用户创建群组,然后在这些群组中聊天/发帖。但是,当在群组中进行帖子/聊天时,我不希望用户必须重新加载页面才能查看该群组中的这些新帖子/聊天。我的问题归结为:对于如何做到这一点(语言,网络服务等)你最好的看法是什么?

我非常了解PHP,SQL,HTML,CSS,并且知道XML,Javascript,AJAX不太好(我已经遇到过足够的知识来阅读代码并知道它们是如何工作的,但我对它们并不熟练或自信我觉得我需要读一本关于其中一个/所有这些的书来构建我所描述的那种网站。)

非常感谢任何和所有输入。

2 个答案:

答案 0 :(得分:3)

Web处理典型的请求/响应模型非常出色,客户端发出请求并且服务器使用资源进行响应。但是,当涉及到服务器必须在没有客户端请求数据的情况下向客户端发送数据的应用程序时,这是我们必须具有创造性的地方。

可以使用一些不同的方法来促进基于Web的实时应用程序。

<强>轮询:

轮询涉及客户端定期向服务器发出请求以接收更新。这种方法存在两个主要问题:首先,可能没有任何数据供服务器推送很长时间。因此,可能浪费大量带宽继续轮询服务器以进行更新。其次,轮询率决定了应用程序的实时性。虽然快速轮询速率会使更新更快出现,但它会浪费带宽。相反,较长间隔的轮询使用较少的带宽,但缺点是更新不会很快出现。

一般来说,这是2012年用于聊天应用程序的非常糟糕的解决方案。

Comet / Reverse AJAX:

Comet是一种技术,在过去的5年中成功应用于采用请求/响应的概念,并使用黑客来模拟实时效果。 Comet背后的一般思想是客户端向服务器发出请求,服务器无限期地保持连接打开。服务器等待,直到有更新发送到客户端。更新准备就绪后,服务器会发送响应,模拟向客户端发出请求的服务器。客户端收到响应后,会打开一个新连接,然后重复该过程。

这种技术与Continuations结合使用时,可以在某些平台上扩展到超过20,000个并发连接,从而确保等待线程可以用于其他任务。

这不仅节省了带宽,而且使应用程序感觉非常实时。

<强>的WebSockets:

Websockets在HTML5中作为Comet的替代品引入,使用ws://协议而不是http。但是,这尚未被所有浏览器供应商广泛采用,并且可能仍然存在关于协议规范的讨论。它有许多与Comet相同的好处。


有关Comet的更多信息,请查看Comet and PHPthe challenges of Comet in PHP。对于客户端集成,请查看the Dojo Cometd Library

答案 1 :(得分:-1)

我会说AJAX是最好的方法。或者,创建一个重新加载的iframe