Mysql
 sql >> база данни >  >> RDS >> Mysql

Анулиране на чакащи AJAX заявки в приложението PHP?

Вероятна причинно-следствена верига

  1. сървърът не осъзнава, че XHR заявките са анулирани и затова съответните PHP процеси продължават да работят
  2. тези PHP процеси използват сесии и предотвратяват едновременния достъп до тази сесия, докато не бъдат прекратени

Възможни решения

Обръщането към някоя от горните две точки прекъсва веригата и може да реши проблема:

  1. (a) ignore_user_abort е FALSE по подразбиране, но може да използвате нестандартна настройка. Променете тази настройка обратно на FALSE във вас php.ini или се обадете на ignore_user_abort(false) в скриптовете, които обработват тези прекъсваеми заявки.

Недостатък:скриптът просто се прекратява. Всяка работа в ход се прекратява, което вероятно оставя системата в мръсно състояние.

  1. (b) По подразбиране PHP няма да открие, че потребителят е прекъснал връзката, докато не бъде направен опит за изпращане на информация до клиента. Направете ехо нещо периодично по време на дългогодишния ви скрипт.

Недостатък:тези фиктивни данни може да повредят нормалния изход на вашия скрипт. И тук скриптът може да остави системата в мръсно състояние.

  1. PHP сесиите се съхраняват като файл на сървъра. На session_start() , скриптът отваря файла на сесията в режим на запис, ефективно придобивайки ексклузивно заключване за него. Следващите заявки, които използват същата сесия, се задържат, докато заключването не бъде освободено. Това се случва, когато скриптът приключи, освен ако не затворите сесията изрично. Обадете се на session_write_close() или session_abort() възможно най-рано.

Недостатък:когато е затворена, сесията не може да бъде записана повече (освен ако не отворите отново сесията , но това е малко неелегантен хак). Също така скриптът продължава да работи, което вероятно губи ресурси.

Определено препоръчвам последния вариант.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да напишете HQL JOIN заявка за избрани колони от множество таблици с помощта на конструктор в клаузата за избор

  2. SQL Вмъкване в таблица само ако запис не съществува

  3. Как да накарам MySQL да обработва UTF-8 правилно

  4. съгласуване на часовите зони с SQL

  5. mysqld_safe директория '/var/run/mysqld' за UNIX сокет файл не съществува