PHP Сервер отправил событие (SSE) не работает на моем новом сервере хостинга - PullRequest
2 голосов
/ 06 марта 2020

У меня есть сценарий SSE, который читает поток новостей с удаленного сервера. Этот удаленный сервер обслуживает все выходные данные взамен. Мой сценарий работает нормально на других моих серверах и даже на локальных компьютерах с использованием localhosts.

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

НОВЫЕ ДАННЫЕ СЕРВЕРА, ГДЕ МОЙ КОД SSE НЕ РАБОТАЕТ

  • cURL нормально работает на новом сервере, я проверил, выполнив вызов без sse
  • Новый сервер это CentOS 8
  • Apache / 2.4.37
  • PHP Версия 7.4.2 и работает нормально
  • С SSL нет проблем, но только для информации SSL установлен

Ниже приведен мой код, который отлично работает для всех моих серверов и локальных хостов.

Примечание: Я заменил имя пользователя, пароль и URL удаленного сервера на фиктивный. Но я использую тот же сценарий для нового сервера со всеми правильными деталями.

<?php
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');

$gwuser        = "USERNAME";        
$gwpass        = "PASSWORD";

if(!empty($gwuser) && !empty($gwpass)){
        $url = 'https://example.com/gateway/stream';    

        ini_set('output_buffering', 'off');
        ini_set('zlib.output_compression',false);
        ini_set('implicit_flush',true);

        while (@ob_end_flush());
        ob_implicit_flush(true);

            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($ch, CURLOPT_USERPWD, $gwuser . ':' . $gwpass);

             $error  = 0;

            //This while loop is only for server timeout after 5 minutes
            while(true) {
                $result = curl_exec($ch);
            }

    }
?>  

Обратите внимание, что нормальный sse работает, когда я могу непрерывно печатать текущее время сервера, поэтому я сомневаюсь, что он не работает во время выполнения cURL звонок на удаленный сервер. Также на удаленном сервере не включен брандмауэр или фильтр уровня домена.

Любая помощь или предложения приветствуются. Спасибо * * 1030

...