【问题标题】:Chatbox with Javascript and php [closed]带有 Javascript 和 php 的聊天框 [关闭]
【发布时间】:2013-03-05 16:10:37
【问题描述】:

我正在尝试使用 JavaScript、PHP 和 SQL(确切地说是 PostgreSQL)创建一个聊天框。目前,我必须每 X 秒使用一次 AJAX 请求检查新消息。

现在这里有一些问题。最大的可能是发送到服务器的请求数量。这种活跃的连接可能会成为带宽杀手。

另一件事是,我们将这些消息保存在我们的数据库中。总是。现在,如果我们检查新消息,我们不想检查整个消息表来只获取我们的新消息。这就是为什么我只想找到新消息并将它们发送给客户。

我见过Ratchet。看起来非常有趣。不幸的是,这不是现在的解决方案。我有点想自己学习这样做,而不是依赖第三方工具。

根据我在谷歌上搜索到的信息,毕竟我需要的不仅仅是这个。如果您对使用某些东西有任何建议,我很想听听。但我现在有点需要在 PHP/SQL/JS 组合中做这个聊天框。

我将如何处理这样的事情?提前致谢。

【问题讨论】:

  • 你说得对,这很棘手。 PHP/SQL 不是它的最佳工具集,但我理解您是否在技术上深陷其中。您将面临的一个大问题是,由于高读取和高写入,您无法有效地索引数据库。如果您可以删除旧记录,它将使数据库查询更快......您期望多少流量?其他功能呢?聊天室?还是只有一间大房间?你会永远保留消息吗?
  • 我不知道流量会有多大。它将在某些页面上用作辅助功能,以与客户进行通信。也就是说,它应该是一对一的。组可能是一个不错的功能,但不是必需的。是的,我们计划永久保留这些消息。
  • 为了提高性能,您还应该考虑将超过 5-15 分钟的消息归档到单独的表中。保留所有相同的数据 - 只需移动行。出于一般目的-无论如何,您永远不会使用超过 15 分钟的行-因此它可以使您的查询快速并索引较小-当您需要查询较大的旧行表时-它的流量要少得多,因此性能很高也是。

标签: php javascript jquery sql


【解决方案1】:

我个人对这些语言的聊天客户端的偏好包括让 JavaScript 保存最后加载的消息的 ID,并在每次 AJAX 调用时将其传递回 PHP 脚本。然后 PHP 可以查询数据库,只请求 ID 高于给定 ID 的消息。

当用户首次加载页面时,您可以通过加载最近 10 条消息或最近 5 分钟的消息或任何最适合您的方式来决定如何处理它。

我让 AJAX 每五秒查询一次服务器,即使有大量用户,它的负载也不会太大。

话虽如此,还有更有效的解决方案,包括服务器通知客户端新消息,但它们要复杂得多!如果您不愿意使用预制的解决方案,您应该坚持使用普通的 AJAX 轮询。

【讨论】:

  • 听起来不错。我会尽快尝试。很高兴听到流量甚至没有那么高,这留下了更多的机会。您是否有流量使用的基准?很想见到他们。关于更复杂的解决方案,这些是否也适用于 PHP/SQL/JS 组合?想知道他们,不管他们有多复杂:P
  • 恐怕我没有,但在极少数情况下会出现延迟,我会显示一个简洁的小东西,告诉用户存在连接问题,因此他们不会跳出.至于其他例子,除了它们存在之外,我对它们了解不多XD
  • 哈哈,没问题。我想我可以解决这个问题。有一件事,创建一个单独的对话数据库并将每个对话存储在他们自己的表中是否有用?我担心如果我们只使用一张桌子,它会变得又大又慢。
  • 这真的取决于您的聊天程序将如何工作。例如,我删除了超过一分钟的消息,因为它旨在成为人们可以随时进出的公共聊天室。但是,如果您想要更多的永久性,您可能需要更多的桌子。
  • 好吧,我个人更喜欢删除旧邮件。然而,我的同事认为最好永远拯救他们。听起来我会和他们讨论这个。无论哪种方式,似乎我知道该怎么做。谢谢!
【解决方案2】:

我要做的是将消息存储在数据库中,并使用 PHP 插入/检索消息,您可以通过会话和不同用户的登录使其尽可能复杂,并且在前端您应该使用 @ 987654321@ 使用json_encode 调用以 json 或 xml 形式回答的 PHP 方法,以便 javascript 可以解释此信息。

因此,在您的前端代码中,您可以在用户发送消息(将 Enter 键绑定到输入)并使用 setInterval 进行轮询时执行 ajax 发布请求,或者您可以使用 push library like APE 来实现一个推送系统,这将使用更少的带宽,但这需要更好的服务器,并在服务器中配置一个 Cron,以便每次有新消息时都会检查。

关于数据库,您可以确定哪个用户使用该用户 IP 发送了消息并将其存储在消息表中。

【讨论】:

  • 标点符号多一点就好了。
  • 英语不是我的主要语言,但无论如何希望它对你有用;)。
猜你喜欢
  • 2010-12-14
  • 2012-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-20
  • 2012-11-19
  • 2016-10-16
  • 2011-04-23
相关资源
最近更新 更多