За последние 24 часа нас посетили 22444 программиста и 1128 роботов. Сейчас ищут 695 программистов ...

Подскажите что делать.

Тема в разделе "PHP для новичков", создана пользователем lemonl, 13 мар 2018.

  1. lemonl

    lemonl Активный пользователь

    С нами с:
    10 июн 2009
    Сообщения:
    164
    Симпатии:
    0
    Здравствуйте,

    Подскажите что делать в такой ситуации и как решить такую проблему?

    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):
    1. <?
    2. $hostname = "bbb";
    3. $username = "zzz";
    4. $password = "kkk";
    5. $dbName = "mydatabase";
    6.  
    7. mysql_connect($hostname,$username,$password);
    8. mysql_select_db($dbName) or die(mysql_error());
    9. $conn = mysqli_connect($hostname, $username, $password, $dbName);
    10.  
    11. if($_GET["type"]=="update") {
    12.       $sqlBB = "UPDATE tabl SET aaaa='bbb', zzz='kk' WHERE nnn='ssss'";
    13. }
    14. if($_GET["type"]=="delete") {
    15.        $sqlBB = "DELETE FROM tabl WHERE dd='rrr'";
    16. }
    17. if($_GET["type"]=="insert") {
    18.     $sqlBB = "INSERT INTO tabl (id, data1) VALUE (1, 'dat');";
    19. }
    20. if($_GET["type"]=="get_count") {
    21.     $sqlBB = "SELECT * FROM tabl WHERE id=dddd";
    22. }
    23.  
    24. if($_GET["rowQuery"]=="true") {
    25.    // здесь выводятся данные для парсинга
    26.    $rowQuery = mysql_query("SELECT COUNT(id) FROM positions ORDER BY id ASC");
    27.    if(mysql_result($rowQuery, 0)) {
    28.      echo mysql_result($rowQuery, 0);
    29.    } else {
    30.      echo -1;
    31.    }
    32.    mysql_free_result($rowQuery);
    33. }
    34.  
    35.     $conn->query($sqlBB);
    36.     $conn->close();
    37.  
    38. ?>
     
    #1 lemonl, 13 мар 2018
    Последнее редактирование: 13 мар 2018
  2. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    Да прибудет с тобой ddos юный падаван
    Код (Text):
    1. siege -c 10 -r 10 -b http://google.com
     
  3. lemonl

    lemonl Активный пользователь

    С нами с:
    10 июн 2009
    Сообщения:
    164
    Симпатии:
    0
    А как выйти из этой ситуации ?
     
  4. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    После запуска в терминале? ctrl+c
     
  5. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.823
    Симпатии:
    736
    Адрес:
    Татарстан
    вообще не гуд....
    лучше пересмотреть этот пункт.....
    например сделать подписку клиента, и отправлять туда данные только при каком-то изменение не думаю что постоянно нужно знать что-то из БД каждую сек... наверное вы что-то новое проверяете
    ...по технологии - вебстокеты подойдут
     
  6. lemonl

    lemonl Активный пользователь

    С нами с:
    10 июн 2009
    Сообщения:
    164
    Симпатии:
    0
    Какую подписку ?


    Когда пользователь заходит по этой ссылке site.com?user=ddddd@gmail.com&getid=true идеи проверка пользователя в БД можно ли ему показывать инфо если да, то выводим (getid) количество ID в БД.
     
  7. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.823
    Симпатии:
    736
    Адрес:
    Татарстан
    Еще раз -
    я говорю ежесекундно сервер дрочить - плохо, это один пользователь а если их 1000?

    PUB/SUB
     
  8. marsik

    marsik Активный пользователь

    С нами с:
    30 дек 2008
    Сообщения:
    246
    Симпатии:
    17
    Можно кэш на секунду поставить.

    Т.с. т.к. будущее туманно, делайте как можете на данный момент, потом все исправите. Сомневаюсь я сильно что у вас там будет 1000 клиентов онлайн, да и еще и на впске
     
  9. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.554
    Симпатии:
    1.754
    Если у тебя VPS, нафига тебе короткий опрос раз в секунду? Положить сервак? Подними centrifugo и сделай на веб-сокетах. Ничего сложного там нету, устанавливается в одну команду, документация есть, пакеты для PHP тоже.

    Или читай про длинные опросы, но это уже прошлый век.
     
  10. lemonl

    lemonl Активный пользователь

    С нами с:
    10 июн 2009
    Сообщения:
    164
    Симпатии:
    0
    А как тогда проверить не изменилось ли там что то ?

    А если я тяну инфо с сокета на страницу, а делее уже из страницы парсю эту инфу... это снимает нагрузку ? Другими словами я не буру напрямую из сокета данные ... что в таком случает ?
     
  11. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.554
    Симпатии:
    1.754
    Веб-сокеты - это такая крутая технология, которая позволяет серверу послать сообщение в браузер: у меня изменились данные.
     
  12. lemonl

    lemonl Активный пользователь

    С нами с:
    10 июн 2009
    Сообщения:
    164
    Симпатии:
    0
    А если я тяну инфо с сокета на страницу, а делее уже из страницы парсю эту инфу... это снимает нагрузку ? Другими словами я не буру напрямую из сокета данные ... что в таком случает ?

    Дело в том что я хочу использовать REST API для обмена данными...
     
  13. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.554
    Симпатии:
    1.754
    Через веб-сокет не тянут страницы, через него обмениваются сигналами. И не называй их просто сокетами, приставка веб подчёркивает, что это другая разновидность технологии. Я вообще предпочитаю по нему не передавать информацию, которая может быть использована (т.е. реальные сообщения пользователей и т.п.). У меня по нему идёт информация "Обновились сообщения в диалоге с пользователем 2", которую если кто и перехватит, то ничего интересного с ней сделать не сможет. REST API - это отдельно, веб-сокеты отдельно. Грубо говоря, вместо того, чтобы обновлять каждую секунду что-то там, ты с сервера через веб-сокет в браузер посылаешь сигнал: у меня появилось новая хрень, тебе надо её отобразить. А в браузере на JS пишешь обработчик сигнала, который ловит сигнал и делает что надо
    --- Добавлено ---
    Правда, тут надо написать серверного демона, который будет передавать эти сигналы. Это можно сделать на php, но они не очень эффективные. Лучше это делать на nodejs, go и т.п. Вот Centrifugo уже написана на go, и всё что от тебя требуется поставить её парой команд (apt-get или yum и т.п.), и пару строчек на php, пару строчек на JS