-2

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

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

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

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

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

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

4

2 回答 2

2

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

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

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

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

于 2013-03-05T16:21:14.113 回答
0

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

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

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

于 2013-03-05T16:24:55.180 回答