Mam nadzieję, że mogę to wyjaśnić wystarczająco dobrze. Pracuję nad stworzeniem PHP library to handle ajax requests through PHP w sposób zorientowany na obiekt. Obecnie zastanawiam się nad dobrym sposobem wdrożenia długiego rozwiązania, ale jestem ciekaw czegoś.Long Polling z PHP na Apache
Apache nie obsługuje otwierania wielu połączeń bardzo dobrze. Model wątku na żądanie sprawia, że Apache jest wysoce nieefektywny w przypadku długiego sondowania. Korzystanie z serwerów takich jak nginx i lighttpd znacznie lepiej radzi sobie z tymi wątkami, dlatego w bibliotece planuję wdrażać różne funkcje zoptymalizowane pod kątem konkretnych serwerów dostępnych z jednego wywołania funkcji. W przypadku Apache, który ma ogromny udział w rynku aplikacji PHP, potrzebuję lepszego rozwiązania.
Czy istnieje sposób umieszczenia przychodzącego żądania w trybie wstrzymania/wstrzymania i kontynuowania przetwarzania innych żądań, dopóki nie będę gotowy do ponownej aktywacji?
Nie jestem pewien, czy to ma sens, czy jestem na dobrej drodze. Jakie jest możliwe rozwiązanie, które SO zaleca dla długiego sondowania w PHP na serwerze Apache?
dlaczego warto wstrzymać przetwarzanie na serwerze? Czy nie zmusiłoby to twojego użytkownika do częstego oczekiwania? – Joseph
Używając Apache, używa modelu wątku na żądanie, więc początkowe żądanie strony w aplikacji używa wątku, a następnie żądanie ajax (wywoływane po wczytaniu DOM) będzie używać osobnego wątku. Problem polega na tym, że ruch o dużym natężeniu powoduje odradzanie się tysięcy wątków i ostatecznie wyłącza serwer. –
Mieliśmy podobny problem, po włączeniu długich stron pollingu ajax/PHP ładunki zaczęły się losowo (cca co 4-5) zabierając zbyt dużo czasu ... na razie i tylko dla uwag rozwiązałem to przez NOT sleep() w PHP w jakikolwiek sposób, i przeniósł funkcję timewait do javascript, więc teraz javascript żąda wykonania każdego PHP na przykład 10s, ale ładowanie strony wydaje się teraz OK. –