Здравствуйте, Подскажите что делать в такой ситуации и как решить такую проблему? 1. Есть сайт-страница на VPS хостинге index.php 2. Есть приложение которое время от времени посылает запросы POST на index.php?somed=data где в итоге данные сохраняются в БД - MYSQL. 3. Есть еще одно приложение(клиент) которое каждую секунду посылает запросы GET на index.php, а она в свою очередь обращается к БД - MYSQL и тянет данные. ВОПРОС: 1. Как получить данные о нагрузке на сервер VPS от ежесекундных запросов GET. 2. Как можно сымитировать подключение 5000 пользователе на страницу index.php которые будут парсить (GET ) ежесекундно данные... Что бы проверить как работает такая схеме и сможет ли она в будущем выдержать такую нагрузку. На какие параметры следует обращать при нагрузке ? 3. Как кэшировать выводимые данные. Как только данные меняются в базе нужно перекэшировать выводимые данные. Нашел такой пример но тут с файлом - http://www.php.su/articles/?cat=protocols&page=014 ... А как сделать под мой запрос ? код страницы index.php Код (Text): <? $hostname = "bbb"; $username = "zzz"; $password = "kkk"; $dbName = "mydatabase"; mysql_connect($hostname,$username,$password); mysql_select_db($dbName) or die(mysql_error()); $conn = mysqli_connect($hostname, $username, $password, $dbName); if($_GET["type"]=="update") { $sqlBB = "UPDATE tabl SET aaaa='bbb', zzz='kk' WHERE nnn='ssss'"; } if($_GET["type"]=="delete") { $sqlBB = "DELETE FROM tabl WHERE dd='rrr'"; } if($_GET["type"]=="insert") { $sqlBB = "INSERT INTO tabl (id, data1) VALUE (1, 'dat');"; } if($_GET["type"]=="get_count") { $sqlBB = "SELECT * FROM tabl WHERE id=dddd"; } if($_GET["rowQuery"]=="true") { // здесь выводятся данные для парсинга $rowQuery = mysql_query("SELECT COUNT(id) FROM positions ORDER BY id ASC"); if(mysql_result($rowQuery, 0)) { echo mysql_result($rowQuery, 0); } else { echo -1; } mysql_free_result($rowQuery); } $conn->query($sqlBB); $conn->close(); ?>
вообще не гуд.... лучше пересмотреть этот пункт..... например сделать подписку клиента, и отправлять туда данные только при каком-то изменение не думаю что постоянно нужно знать что-то из БД каждую сек... наверное вы что-то новое проверяете ...по технологии - вебстокеты подойдут
Какую подписку ? Когда пользователь заходит по этой ссылке site.com?user=ddddd@gmail.com&getid=true идеи проверка пользователя в БД можно ли ему показывать инфо если да, то выводим (getid) количество ID в БД.
Можно кэш на секунду поставить. Т.с. т.к. будущее туманно, делайте как можете на данный момент, потом все исправите. Сомневаюсь я сильно что у вас там будет 1000 клиентов онлайн, да и еще и на впске
Если у тебя VPS, нафига тебе короткий опрос раз в секунду? Положить сервак? Подними centrifugo и сделай на веб-сокетах. Ничего сложного там нету, устанавливается в одну команду, документация есть, пакеты для PHP тоже. Или читай про длинные опросы, но это уже прошлый век.
А как тогда проверить не изменилось ли там что то ? А если я тяну инфо с сокета на страницу, а делее уже из страницы парсю эту инфу... это снимает нагрузку ? Другими словами я не буру напрямую из сокета данные ... что в таком случает ?
Веб-сокеты - это такая крутая технология, которая позволяет серверу послать сообщение в браузер: у меня изменились данные.
А если я тяну инфо с сокета на страницу, а делее уже из страницы парсю эту инфу... это снимает нагрузку ? Другими словами я не буру напрямую из сокета данные ... что в таком случает ? Дело в том что я хочу использовать REST API для обмена данными...
Через веб-сокет не тянут страницы, через него обмениваются сигналами. И не называй их просто сокетами, приставка веб подчёркивает, что это другая разновидность технологии. Я вообще предпочитаю по нему не передавать информацию, которая может быть использована (т.е. реальные сообщения пользователей и т.п.). У меня по нему идёт информация "Обновились сообщения в диалоге с пользователем 2", которую если кто и перехватит, то ничего интересного с ней сделать не сможет. REST API - это отдельно, веб-сокеты отдельно. Грубо говоря, вместо того, чтобы обновлять каждую секунду что-то там, ты с сервера через веб-сокет в браузер посылаешь сигнал: у меня появилось новая хрень, тебе надо её отобразить. А в браузере на JS пишешь обработчик сигнала, который ловит сигнал и делает что надо --- Добавлено --- Правда, тут надо написать серверного демона, который будет передавать эти сигналы. Это можно сделать на php, но они не очень эффективные. Лучше это делать на nodejs, go и т.п. Вот Centrifugo уже написана на go, и всё что от тебя требуется поставить её парой команд (apt-get или yum и т.п.), и пару строчек на php, пару строчек на JS