Php 聊天客户端/帖子,无需重新加载页面

Php 聊天客户端/帖子,无需重新加载页面,php,javascript,ajax,chat,Php,Javascript,Ajax,Chat,我希望创建一个网站,允许用户创建组,然后在这些组内聊天/发帖。但是,当在一个组中发布帖子/聊天时,我不希望用户必须重新加载页面才能查看该组中的这些新帖子/聊天。我的问题可以归结为:您对如何做到这一点(语言、Web服务等)的最佳意见是什么 我很了解PHP、SQL、HTML、CSS,但对XML、Javascript、AJAX不太了解(我遇到过他们,足以阅读代码并了解它们的工作原理,但我对他们一点也不熟练或不自信。我觉得我需要阅读一本关于其中一种/所有这些的书来构建我描述的那种网站。) 任何和所有的输

我希望创建一个网站,允许用户创建组,然后在这些组内聊天/发帖。但是,当在一个组中发布帖子/聊天时,我不希望用户必须重新加载页面才能查看该组中的这些新帖子/聊天。我的问题可以归结为:您对如何做到这一点(语言、Web服务等)的最佳意见是什么

我很了解PHP、SQL、HTML、CSS,但对XML、Javascript、AJAX不太了解(我遇到过他们,足以阅读代码并了解它们的工作原理,但我对他们一点也不熟练或不自信。我觉得我需要阅读一本关于其中一种/所有这些的书来构建我描述的那种网站。)


任何和所有的输入都将不胜感激。

Web在处理典型的请求/响应模型方面做得非常好,其中客户端发出请求,服务器使用资源进行响应。然而,对于服务器必须向客户机发送数据而客户机不请求数据的应用程序,这是我们必须发挥创造力的地方

有几种不同的方法可用于促进基于Web的实时应用程序

轮询:

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

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

Comet/Reverse AJAX:

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

在某些平台上,当与Continuations结合使用时,这种技术已被证明可以扩展到20000多个并发连接,从而确保等待的线程被释放出来用于其他任务

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

WebSocket:

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



有关Comet的更多信息,请查看和。对于客户端集成,请查看。

我会说AJAX是实现这一点的最佳方法。或者,创建一个重新加载的iframe,您可以尝试。但它没有创建组。您可以使用像ejabberd或Openfire这样的xmpp聊天服务器来配置它。另外,如果您使用php/ajaxflying开发web聊天客户端,我建议使用长轮询-澄清一下,长轮询与轮询不同。长轮询也称为反向AJAX或Comet,只是为了澄清Pradeep的优秀建议。这两种解决方案本质上都涉及轮询,而轮询并不是解决此问题的最佳、最有效或最现代的方法。他并不要求这样做。他要求找到一个解决办法来解决这个问题。如果您没有提到有效的解决方案,请删除您对有效答案的否决票。如果使用AJAX进行此操作,则需要连续轮询,这不是一个好的解决方案。(另外,你不应该假设是谁否决了你。不是我。我今天没有投票权。)
但是,当在一个组中发布帖子/聊天时,我不希望用户必须重新加载页面才能查看该组中的这些新帖子/聊天。我的问题归结为:您对如何做到这一点(语言、Web服务等)的最佳意见是什么?
。Comet或Websockets就是答案。这就是整个答案的意义所在,也是人们不应该使用轮询解决方案的原因。