Ответы пользователя по тегу Nginx
  • Как отправить push-уведомление (Nginx, PHP)?

    Huzzah
    @Huzzah Автор вопроса
    web-developer
    @fornit1917

    - мне нужно после загрузки и обработки изображений перенаправить пользователя на страницу редактирования. Т. е. мне нужно знать, что все фотки из панели загрузки либо обработались удачно, либо обработались неудачно (суть не в перехвате исключений).
    - понятно про БД.
    - не ясно про фоновый режим. что такое обработчик очередей я понимаю, но не пробовал использовать. читал про redis, activemq, zeromq, rabbitmq. нужен обработчик очередей, который можно использовать под Windows (Server 2008) + простой пример его использования.
    - на данный момент идея есть такая:

    $app->post('/photos-upload', function() use ($app, $dbConn) { 
        // проверили все что нам нужно
        $app->performAsyncPost('http://localhost:8090/mx/api/photos-process', array(
            // отправляем всякие данные
            'args' => 'data'
        ));
    }
    $app->post('/photos-process', function() use ($app, $dbConn) { 
        // отправляем что-то вроде curl http://localhost/pub?id=ch1 -d "Pending"
        // делаем нужные нам операции
        // отправляем что-то вроде curl http://localhost/pub?id=ch1 -d "Done"
    }
    
    public function performAsyncPost($url, array $params) {
        foreach($params as $key => &$val) {
            if(is_array($val)) $val = implode(',', $val);
            $post_params[] = $key.'='.urlencode($val);  
        }
                
        $post_string = implode('&', $post_params);
        $parts = parse_url($url);
    
        $fp = fsockopen($parts['host'], isset($parts['port']) ? $parts['port'] : 80, $errno, $errstr, 30);
    
        $out = "POST ".$parts['path']." HTTP/1.1\r\n";
        $out.= "Host: ".$parts['host']."\r\n";
        $out.= "Content-Type: application/x-www-form-urlencoded\r\n";
        $out.= "Content-Length: ".strlen($post_string)."\r\n";
        $out.= "Connection: Close\r\n\r\n";
        if(isset($post_string)) $out.= $post_string;
        fwrite($fp, $out);
        fclose($fp);
    }


    на клиентской стороне опрашивать канал-файл
    Ответ написан
    Комментировать