Задать вопрос
@jealrockone

Nginx timeout error при использовании SSE Rails?

Здравствуйте, пытаюсь настроить сервер и использовать SSE. Вот пример ошибки которая возникает:
2016/08/24 16:15:57 [error] 6923#0: *1427 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 178.35.63.179, server: _, request: "GET /users/sse/events HTTP/1.1", upstream: "http://unix:/var/run/unicorn.sock/users/sse/events", host: "example.ru", referrer: "example.ru/1"
Вот функция контроллера, которая управляет SSE:
def events
        response.headers["Content-Type"] = "text/event-stream"
        ActiveRecord::Base.connection_pool.with_connection do |connection|
            conn = connection.instance_variable_get(:@connection)
            begin
                conn.async_exec "LISTEN user#{current_user.id}"
                conn.async_exec "LISTEN heartbeat"
                conn.wait_for_notify do |event, id, data|
                    puts event.to_s
                    if event == "user#{current_user.id}"
                        response.stream.write("event: message\ndata: #{data}\n\n")
                    elsif event == "heartbeat"
                        response.stream.write("event: heartbeat\ndata: heartbeat\n\n")
                    end
                end
            rescue
                #Client disconnected
            ensure
                conn.async_exec "UNLISTEN user#{current_user.id}"
                conn.async_exec "UNLISTEN heartbeat"
                conn.flush
                conn.finish
            end
        end
        rescue
            #puts "@@@@@@@@@@@@@@ IOERROR"
        ensure
            #puts "@@@@@@@@@ Strem closed"
            response.stream.close
    end

Вроде как конекшны закрываю, использую "heartbeat" для того чтобы определить отключился ли пользователь. Может кто знает в чем дело? Я думаю что все таки что-то не так с этой функцией. Руби сервер - Unicorn
  • Вопрос задан
  • 625 просмотров
Подписаться 3 Сложный 2 комментария
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы