sql >> Databasteknik >  >> RDS >> Mysql

Vill du avbryta väntande AJAX-förfrågningar i PHP-appen?

Trolig orsakskedja

  1. servern inser inte att XHR-förfrågningarna har avbrutits, och därför fortsätter motsvarande PHP-processer att köras
  2. dessa PHP-processer använder sessioner och förhindrar samtidig åtkomst till denna session tills de avslutas

Möjliga lösningar

Att adressera någon av ovanstående två punkter bryter kedjan och kan lösa problemet:

  1. (a) ignore_user_abort är FALSK som standard, men du kan använda en icke-standardinställning. Ändra tillbaka den här inställningen till FALSK i dig php.ini eller ring ignore_user_abort(false) i skripten som hanterar dessa avbrottsbara förfrågningar.

Nackdel:skriptet avslutas bara. Allt pågående arbete avbryts, vilket möjligen lämnar systemet i ett smutsigt tillstånd.

  1. (b) Som standard kommer PHP inte att upptäcka att användaren har avbrutit anslutningen förrän ett försök görs att skicka information till klienten. Gör echo något med jämna mellanrum under loppet av ditt långa manus.

Nackdel:denna dummydata kan förstöra den normala utmatningen av ditt skript. Och även här kan skriptet lämna systemet i ett smutsigt tillstånd.

  1. En PHP-session lagras som en fil på servern. På session_start() , öppnar skriptet sessionsfilen i skrivläge, vilket effektivt får ett exklusivt lås på den. Efterföljande förfrågningar som använder samma session parkeras tills låset släpps. Detta händer när skriptet avslutas, såvida du inte stänger sessionen uttryckligen. Ring session_write_close() eller session_abort() så tidigt som möjligt.

Nackdel:när den är stängd kan sessionen inte skrivas längre (såvida du inte öppnar sessionen igen , men det här är något oelegant hack). Skriptet fortsätter också att köras, vilket kan slösa med resurser.

Jag rekommenderar definitivt det sista alternativet.



  1. JSON_OBJECT() Funktion i Oracle

  2. Att göra fallet för regelbunden SQL Server-service

  3. ST_HexagonGrid geomvektor för att hitta alla punkter

  4. Ställ in Postgresql Schema Path permanent