php - 无需重新加载页面的聊天客户端/帖子

标签 php javascript ajax chat

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

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

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

最佳答案

Web 在处理典型的请求/响应模型方面做得很好,在这种模型中,客户端发出请求,服务器响应资源。然而,当涉及到服务器必须向客户端发送数据而客户端不请求数据的应用程序时,这就是我们必须发挥创意的地方。

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

投票:

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

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

cometd /反向 AJAX:

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

当与 Continuations 结合使用时,该技术已被证明可以在某些平台上扩展到超过 20,000 个并发连接,从而确保释放等待线程以执行其他任务。

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

网络套接字:

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


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

关于php - 无需重新加载页面的聊天客户端/帖子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10671925/

相关文章:

php - 每个用户的动态 CSS

php - 从行 MySql 数据库中删除空格

javascript - 使用 JQuery 和 ajax post 在表单中选择另一个下拉列表时更改下拉列表值

php - sql 搜索查询仍未产生预期结果

php - 使用 $match 使用 PHP MongoDB 聚合框架按日期过滤

javascript - 流式 Web 应用程序 - Twitter、Facebook、NoSQL 还是 SQL?

javascript - ASP.Net 中下拉框的数据绑定(bind)

javascript - 是否可以将同一个文本框聚焦在其 onBlur() 事件上?

javascript - ajax调用未正确发送数据

ajax - Ajax在现代网站中的作用和范围。找到合适的平衡