Обработка Запроса HTTP

Если будет Запрос HTTP, прибывающий в веб-сервер от многих клиентов, то запросы будут обработаны в порядке.

Для всего запроса HTTP я хочу использовать маркерную систему блока. Таким образом, когда существует первый Запрос, я пишу число в файл и увеличиваю число для следующего запроса и так далее..

Я не хочу делать это в DB, так как размер DB увеличивается..

Это правильный способ сделать это. Предложите

Править: Таким образом, если пользователь добавляет комментарий, комментарий должен быть сохранен в файл вместо DB.So для отслеживания его существует переменная, которая увеличена для каждого request.this числа, будет использоваться в письменной форме имя файла и отошлет его для будущего reference.so, если будет много запросов, это правильный способ сделать это..

Спасибо..

1
задан Hulk 3 August 2010 в 06:40
поделиться

2 ответа

Почему бы не заблокировать ( http://php.net/manual/en/function.flock.php ) файлы в папке?

Блокирует первый вызов 01,
Блокирует второй вызов 02,
3-й вызов блокирует 03,
01 разблокируется,
4-й вызов блокирует 01

В основном каждый скрипт php пытается заблокировать первый файл, который может, и когда это делается, он разблокирует / стирает файл.

Я использую это в системе с более чем 250 дочерними процессами, порожденными «менеджером процессов». Пытался использовать базу данных, но это все тормозило.

Если вы хотите продолжать увеличивать номер файла для некоторого контента, я бы предложил использовать mktime () или time () и использовать


$now=time();
$suffix=0;
while(is_file($dir.$now.'_'.$suffix)) {
  $suffix++;
} 

Но опять же, в зависимости от того, как вы хотите читать данные или использовать их, существует много опции. Не могли бы вы предоставить более подробную информацию?

----- РЕДАКТИРОВАТЬ 1 -----

  1. Каждый запрос имеет "файл блокировки" и сохраняет идентификатор (номер) блокировки в $ lock.
  2. три посетителя публикуют сообщения одновременно с идентификатором блокировки 01, 02, 03 (последний шаг в описанной ситуации).

$now=time();
$suffix=0;
$post_id=30;
$dir='posts/'.$post_id.'/';
if(!is_dir($dir)) { mkdir($dir,0777,true); }
while(is_file($dir.$mktime.'_'.$lock.'_'.$suffix.'.txt')) {
  $suffix++;
}

Время не нужно, но я обычно оставляю его на всякий случай :). Это должно создать текстовый файл 30 / 69848968695_01_0.txt и ..02_0.txt и ..03_0.txt.

Если вы хотите показать комментарии, вы просто сортируете их по имени файла ....

1
ответ дан 2 September 2019 в 22:30
поделиться

Размер базы данных не должен увеличиваться. Все, что вам нужно, это одна строка. По идее, логика такова:

 Read row, taking lock, getting the current count
 Write row with count incremented, releasing lock

Обратите внимание, что вы используете блокировки базы данных, чтобы иметь дело с возможностью одновременной обработки нескольких запросов.

Итак, я предлагаю использовать базу данных как место для управления вашим счетом. Вы по-прежнему можете записывать свои другие данные в файлы, если хотите. Тем не менее, вам по-прежнему понадобится работа с файлами. Это намного сложнее с базой данных?

1
ответ дан 2 September 2019 в 22:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: