Сесії в PHP - підводний камінчик при асинхронних запитах

    
Невелика передісторія.
У мене є хобі-проект трекер.ру
Алгоритм такий: користувач вводить пошуковий запит, цей запит «на льоту» шукає торренти на сторонніх трекерах (рутор, рутрекере, tfile і тд).
Для паралельного пошуку йде одночасно кілька аякс запитів, які повинні оброблений асинхронно.
Однак, запити виконувалися синхронно. Якщо якийсь трекер довго не віддавав відповідь, то інші запити підвисає і чекали відповіді від підвішеному трекера. Загальний час виконання запитів дорівнювало сумі всіх запитів. Хоча, за моїми планами загальний час повинно було дорівнювати найдовшому запитом.
Довго ламав голову, чому так. Грішив на HTTP pipelining . Але, причина виявилася набагато банальніше. Вся справа в сесіях. Справа в тому, що сесії в php Консистентне і php не дасть звернутися іншому процесу до вже зайнятої сесії.
 
Читати далі →