我正在寻找一个允许用户创建组然后在这些组中聊天/发帖的站点。但是,当在组内发布帖子/聊天时,我不希望用户必须重新加载页面才能查看该组内的这些新帖子/聊天。我的问题归结为:您对如何做到这一点(语言、网络服务等)的最佳意见是什么?
我很了解 PHP、SQL、HTML、CSS,但不太了解 XML、Javascript、AJAX(我遇到过足够多的人来阅读代码并知道它们是如何工作的,但我对它们并不熟练或自信。我有感觉我需要读一本书/所有这些来建立我描述的那种网站。)
任何和所有输入将不胜感激。
我正在寻找一个允许用户创建组然后在这些组中聊天/发帖的站点。但是,当在组内发布帖子/聊天时,我不希望用户必须重新加载页面才能查看该组内的这些新帖子/聊天。我的问题归结为:您对如何做到这一点(语言、网络服务等)的最佳意见是什么?
我很了解 PHP、SQL、HTML、CSS,但不太了解 XML、Javascript、AJAX(我遇到过足够多的人来阅读代码并知道它们是如何工作的,但我对它们并不熟练或自信。我有感觉我需要读一本书/所有这些来建立我描述的那种网站。)
任何和所有输入将不胜感激。
Web 在处理典型的请求/响应模型方面做得很好,其中客户端发出请求,服务器响应资源。但是,当涉及到服务器必须向客户端发送数据而客户端不请求数据的应用程序时,这就是我们必须发挥创造力的地方。
可以使用几种不同的方法来促进基于 Web 的实时应用程序。
轮询:
轮询涉及客户端定期向服务器发出请求以接收更新。这种方式有两个主要问题:第一,很长一段时间内可能没有数据供服务器推送。因此,可能会浪费大量带宽继续轮询服务器以获取更新。其次,轮询率决定了应用程序的实时性。虽然快速的轮询速度会使更新更快出现,但它会浪费带宽。相反,较长间隔的轮询使用较少的带宽,但缺点是更新不会很快出现。
一般来说,对于 2012 年的聊天应用来说,这是一个非常糟糕的解决方案。
彗星/反向 AJAX:
Comet 是一种在过去 5 年中成功使用的技术,它采用请求/响应的概念并使用 hack 来模拟实时效果。Comet 背后的一般思想是客户端向服务器发出请求,服务器无限期地保持连接打开。服务器等待直到有更新发送给客户端。一旦更新准备就绪,服务器就会发送响应,这会模拟服务器向客户端发出请求。一旦客户端收到响应,它就会打开一个新连接,并重复该过程。
当与 Continuations 结合使用时,该技术已被证明可以在某些平台上扩展到超过 20,000 个同时连接,从而确保为其他任务释放等待线程。
这不仅节省了带宽,而且使应用程序感觉非常实时。
网络套接字:
Websockets 是在 HTML5 中引入的,作为 Comet 的替代品,使用的是 ws:// 协议而不是 http。然而,这还没有被所有浏览器供应商广泛采用,关于协议的规范可能仍然存在讨论。它有许多与彗星相同的好处。
有关 Comet 的更多信息,请查看Comet 和 PHP以及Comet 在 PHP 中的挑战。对于客户端集成,请查看Dojo Cometd 库。
我会说 AJAX 是最好的方法。或者,创建一个重新加载的 iframe