У меня есть код jQuery, который отправляет длительный HTTP-запрос (XHR) в отношении модели Comet.
Таким образом, один игрок сигнализирует, что он ждет, когда его противник сделает ход. Когда противник выполняет действие (он ждет от нескольких секунд до 2 минут), pendingAction.txt
создается файл с описанием хода противника.
Когда сервер получает запрос XHR от игрока, он запускает бесконечный цикл, ожидая хода противника:
while(1){
if(file_exists("pendingAction.txt")){
$file = fopen($fileName, "r");
$fileSize = filesize($fileName);
if($fileSize){ //if file's not empty
$commandsEncoded = fread($file, $fileSize);
fclose($file);
unlink($fileName);
break;
}
}else{
session_write_close(); //close the session prematurely to avoid sleep() and usleep() from locking other requests
sleep(5);
}
}
Я не могу продлить sleep(...)
Параметр слишком большой, так как он влияет на время реакции (игрок может заметить «лаги»).
Но с таким сценарием я действительно потребляю много ресурсов процессора (у меня много активных игр на сервере).
Есть ли способ сделать это лучше? Может быть, некоторые пассивное ожидание метод вместо моего активного?
я бы хотел придерживаться PHP / JQuery и не задействовать дополнительные библиотеки или внешние скрипты если это возможно.
Задача ещё не решена.
Других решений пока нет …