2017-09-22 213 views
0

我有一個問題與SSE通過HTTPS,讓我說清楚,我有一個Nginx服務器,聽取https,並在後面的Rails美洲獅,所以我有這個在JS coffescript):SSE通過https不工作

initStream =() -> 
    rechargePayment.source = new 
    EventSource('/proggress/stream') 

,並在軌道控制器我有:

def stream 
    response.headers['Content-Type'] = 'text/event-stream' 
    redis = Redis.new 
    redis.psubscribe(['proggress.refresh', 'heartbeat']) do |on| 
     on.pmessage do |_pattern, event, data| 
     response.stream.write("event: #{event}\n") 
     response.stream.write("data: #{data}\n\n") 
     end 
    end 
    rescue IOError 
    logger.info 'Stream stoped' 
    ensure 
    logger.info 'Stopping Stream Thread' 
    redis.quit 
    response.stream.close 
    end 

當我嘗試這通過HTTPS,它什麼也不做,在日誌中我只看到錯誤:「流關閉」,但如果我嘗試通過HTTP它完美的作品。

編輯:我看到這個: 「EventSource接口用於接收服務器發送的事件,它通過HTTP連接到服務器,並接收文本/事件流格式的事件,而不關閉連接。

來源:https://developer.mozilla.org/en-US/docs/Web/API/EventSource

那麼,這是否意味着它只能在HTTP?

回答

0

所以,是的,這個問題是在nginx的,我只好把這些設置:

proxy_set_header Connection ''; 
proxy_http_version 1.1; 
chunked_transfer_encoding off; 

,並在軌道控制器補充一點:

response.headers['X-Accel-Buffering'] = 'no'