【问题标题】:Ajax query without reconnecting to database无需重新连接到数据库的 Ajax 查询
【发布时间】:2016-02-05 10:39:05
【问题描述】:

我编写了网页以在地图上显示汽车。所有页面刷新过程都是使用 XMLHttpRequest 完成的。所有数据库查询,不管是在页面加载时的查询,都是用相同的方法完成的。 问题是当我发送 XMLHttpRequest 时,我需要打开到我的数据库的新连接。页面每隔几秒钟刷新一次,并且必须刷新很多对象。它会为我的数据库生成许多新连接。

我想要做的是在我启动我的页面时只打开一次 mysql 连接并在所有这些 Ajax 查询中使用这个连接。

有可能吗?

(已编辑)

根据您的回答,我一直在寻找持久连接和 Node.js,但我仍然无法理解它。 有人可以发布持久连接和 XHR 的示例吗?

请帮助我了解 Http Connection Lifecycle。当我写 mysql_connect 时会发生什么?连接何时关闭? mysql_pconnect 呢?从服务器的角度来看,开放连接如何?

【问题讨论】:

  • 使用持久连接,或单例类或存储您在会话中获得一次的数据,如果不经常更新,则下次从会话中获取。
  • 您可以使用持久连接,是的 - 尽管如果您在每次使用后不关闭连接,您更容易受到攻击。此外,与许多小型但快速关闭的连接相比,打开大型持久连接可能会给您的服务器带来更多压力(但我认为速度比较值得测试)。
  • 如果可能,请不要为此使用 PHP。有更好的平台更适合您的方法,例如 NodeJS。
  • 就像@MartinHeralecký 所说,这种网络/应用程序/游戏比websockets 更好。易于与 nodejs 一起使用。

标签: javascript php mysql ajax


【解决方案1】:

如果没有技巧,您无法使用 PHP 做到这一点。

每次你请求一个由 PHP 驱动的网页查询数据库(如 MySQL)时,PHP 都需要“打开”一个连接,查询数据库,关闭连接并自行关闭。

...但是有一些技巧:

1:分块解决方案

使用循环对 PHP 脚本执行 XMLHttpRequest 请求(30 秒可以)。每次循环执行,您都可以编写一些要在 ajax 查询上返回的数据。循环结束后,重试查询(每 30 秒连接一次)。

这种解决方案称为分块数据。每个循环都返回“部分”响应,并且 ajax 查询解析每个数据块。这需要有一个没有缓冲缓存的 PHP 和 Web 服务器。

2:守护进程解决方案

您可以使用“后台”PHP 脚本作为守护进程,使用一个线程(或多个线程?)查询数据库,制作一些静态文件(包含 json?)并使用XMLHttpRequest 查询静态文件。

【讨论】:

    猜你喜欢
    • 2012-11-13
    • 2017-09-05
    • 2023-04-02
    • 1970-01-01
    • 2012-08-04
    • 2021-11-15
    • 2011-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多