• Как взаимодействуют nginx-push-stream-module и php?

    mrhard
    @mrhard
    web разработчик
    Я рекомендую использовать на фронтэнде JS либу PushStream https://github.com/wandenberg/nginx-push-stream-mo...

    Отправляем сообщение на фронтенд через nginx-push-stream-module сервер
    $message = array('message'=>'Привет!');
        $idChannel = 1; //ID канала
        $nginxPushStreamModuleHost = 'http://localhost/'  //ВАШ СЕРВЕР С nginx-push-stream-module
          //отправка сообщения
          $ch = curl_init();
          curl_setopt($ch, CURLOPT_URL, $nginxPushStreamModuleHost.'pub/'.$idChannel);
          curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
          curl_setopt($ch, CURLOPT_POST, true);
          curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($message));
          curl_exec($ch);
          print_r(curl_getinfo($ch));
          curl_close($ch);


    Прослушиваем nginx-push-stream-module сервер на фронтенде
    idChannel = 1; //ID канала
    nginxPushStreamModuleHost = 'http://localhost/'; //ВАШ СЕРВЕР С nginx-push-stream-module
    
    pushstream = new PushStream({
                            timeout: 20000,
                            modes: 'eventsource|stream',
                            host:nginxPushStreamModuleHost,
                        
                            useSSL:false 
                            
                          });
    
    pushstream.onmessage = function(json) {
    //Сработает если с сервера что-то пришло пользователю
    alert('О! что-то пришол! Сообщение: '+json.message)
    }
    
    pushstream.addChannel(idChannel);
    pushstream.connect();
    Ответ написан
    1 комментарий
  • Старт проекта на NodeJS+MongoDB или PHP+MySQL?

    batyrmastyr
    @batyrmastyr
    Независимо от выбора БД, отделять комментарии от расписаний нужно обязательно и каждый комментарий хранить отдельным документом/строкой. Так вы сможете забирать из базы не всю гипотетическую тысячу сообщений, а только новые.

    Для сообщений в реальном времени: а правда ли вам нужно оно нужно или устроит задержка в 1 - 5 секунд? Если нужно, то стоит посмотреть на модуль HTTP Push Stream для nginx.

    В 2020 чистый JavaScript только для «хренак-хренак и в продакшен» пригоден. Если и выбирать, то между TypeScript / Dart / PHP.

    1) Типизация: PHP / TS / Dart
    2) По скорости: для сайтов с < 200 000 просмотров в сутки даже на классическом php-fpm хватит пары ядер. Но если хочется «чтобы не хуже ноды», то смотрите в сторону swoole, roadrunner, amp и workerman с phpsocket.io.
    3) Возможность писать клиентский и серверный код на одном языке: JavaScript / TypeScript / Dart.

    В роли базы данных лучше возьмите постгрес - он лучше монги почти всем параметрам (скорость почти любых запросов, потребление памяти), только сложные запросы по json у него выглядят, кхм, страшненько. Но уж лучше страшные запросы, чем отдавать монге от 1 гига до 50% оперативки, строить индексы на все подряд поля и несмотря на это терпеть её тормоза.
    Ответ написан
    4 комментария
  • Сколько стоит разработка?

    Robur
    @Robur
    Знаю больше чем это необходимо
    но хотя бы примерно сориентироваться было бы не плохо. Так же был бы рад услышать вообще общие рекомендации к тому как считать стоимость проектов?


    Если вы будете делать его этот месяц на полный рабочий день - то примерно и ориентируйтесь на то сколько вы считаете адекватным за месяц своей работы. Сколько вы хотите за месяц получить и считаете эту цифру адекватной?

    Общие рекомендации одни и те же - берете время которое нужно затратить и в цену ставите стоимость этого времени. Эту стоимость вам никто не скажет, потому что это то что только вы знаете (должны знать). Может быть где угодно от 20т до 200т за месяц работы. Основная ваша задача - узнать стоимость своего времени, тут самый простой способ - повышать и повышать цену пока не поймете что дальше уже никто вам столько не платит. Проверить можно только на практике, начните с любой цифры которая вам подходит и вперед, на 5-м проекте будете уже знать.
    Размышления заранее, и советы из интернета это просто эмоциональный онанизм, чтобы себя успокоить, для поиска этой цифры совершенно бесполезны.
    Ответ написан
    1 комментарий
  • Последняя активность пользователя на сайте?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    У вас для авторизованного пользователя всегда есть $user_id, а значит при любой активности (клике) можно обновлять значение "время активности" в БД для данного $user_id;
    Чуть более оптимизированный вариант, обновлять время активности не чаще чем раз в какое-то время (раз в минуту например). Для этого используете сессии как промежуточное хранилище, запоминая когда в последний раз обновляли данные в БД. Если обновление было больше минуты назад, обновляем значение в БД снова.
    При таком подходе, если пользователь, сделал за минуту 10 кликов на сайте, то в БД вы сделаете UPDATE 1-2 раза, вместо 10 раз.
    Ответ написан
    Комментировать
  • Старт проекта на NodeJS+MongoDB или PHP+MySQL?

    @d-sem
    Если не мучаться с нормализацией данных на входе как в реляционных базах данных, то придется мучаться с ней на выходе. Обратная сторона удобства.

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

    Лучше не заниматься преждевременной оптимизацией. Сделать прототип на том стеке, что лучше известен. Уточнить требования и уже дальше решить - стоит оптимизировать или нет. А еще лучше сделать два прототипа и решить, что лучше на практическом сравнении. Практическое же сравнение делать на основании тестов из сформированных требований.
    Ответ написан
    5 комментариев