Php Sse не может получить данные от Nginx - PullRequest
0 голосов
/ 22 октября 2019

это мой сценарий: у меня есть приложение Laravel в качестве бэкэнда и приложение ReactJs в качестве внешнего интерфейса, который мне нужен, чтобы общаться друг с другом с помощью SSE. В localhost, используя «artisan serve» в качестве веб-сервера, все работает как шарм, проблема возникает, когда я использую Nginx.

Это мой внутренний код:

public function pushExportedDocuments(Request $request)
    {
        $isFirst = true;
        $response = new StreamedResponse(function () use ($isFirst) {
            $usedIds = [];
            while (true) {
                if ($isFirst) {
                    \Log::debug("I'm alive, folks!");
                    echo 'data: ' . json_encode(["isAlive" => true]) . "\n\n";
                    ob_flush();
                    flush();
                    $isFirst = false;
                } else {
                    $data = $this->getData();
                    echo 'data: ' . json_encode($temp) . "\n\n";
                    ob_flush();
                    flush();
                    \Log::debug("Sse sent, message id: " . $data->id);
                    array_push($usedIds, $data->id);                    
                }
                sleep(3);
            }
        });
        $response->headers->set('Content-Type', 'text/event-stream');
        $response->headers->set('X-Accel-Buffering', 'no');
        $response->headers->set('Cache-Control', 'no-cache');
        return $response;
    }

А это Nginxконфиг для моего бэкэнд-сайта:

location ~ /documents_sse {
        proxy_buffering off;
        proxy_cache off;
        proxy_set_header Connection '';
        chunked_transfer_encoding off;
        proxy_http_version 1.1;
        proxy_connect_timeout 3600;
        proxy_send_timeout 3600;
        proxy_read_timeout 3600;
        proxy_buffer_size 0;
        proxy_set_header Host $host;
        gzip off;
        access_log  /var/log/nginx/app_sse-access.log;
        try_files $uri $uri/ /index.php?$query_string;
    }

В файле laravel.log оба "Я жив, ребята!"и "Sse sent, message id: {id}" написаны правильно, так же как и для сообщений в app_sse-access.log, но для клиента ничего не происходит.

Я не могу обработать, чтобы позволитьсообщения выходят из Nginx, некоторые подсказки?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...