Mam taki skrypt czata oparty o long polling.

  1. function updateShouts(callback) {
  2. $.ajax({
  3. type: 'GET',
  4. url: 'shout_script.php?last_id=' + last_id,
  5. async: true,
  6. cache: false,
  7. timeout: 30000,
  8. success: function(data) {
  9. // update
  10. updateShouts();
  11. },
  12. error: function() {
  13. updateShouts();
  14. }
  15. });
  16. }


  1. <?php
  2. // connect
  3. $current = shout_pro_lastId();
  4. $last_id = isset($_GET['last_id']) ? $_GET['last_id'] : -1;
  5. while ($current == $last_id) {
  6. usleep(6000000);
  7. $current = shout_pro_lastId();
  8. }


Wszystko działa fajnie w teorii ale uruchomienie czata i pozostawianie go działającego zabija ostatecznie serwer.
Liczba procesów (Threads_connected) powoli sobie rośnie, aż osiąga swój limit (u mnie 200 ale to bez znaczenia).
Co ciekawe zamknięcie strony z czatem nie powoduje zamknięcia tych połączeń - jest sobie ich 20 to tyle zostaje.

Jakieś sugestie?
Większość przykładów long polling opiera się o odczycie w oparciu o pliki gdzie nie trzeba się tym przejmować po prostu.
Wiem, że PHP + mySQL to nie jest najszczęśliwsze rozwiązanie ale czasem jesteśmy na nie skazani.