Nginx를 통한 EventSource / 서버 전송 이벤트
stream
블록 과 함께 Sinatra를 사용하는 서버 측에서 .
get '/stream', :provides => 'text/event-stream' do
stream :keep_open do |out|
connections << out
out.callback { connections.delete(out) }
end
end
클라이언트 측 :
var es = new EventSource('/stream');
es.onmessage = function(e) { $('#chat').append(e.data + "\n") };
를 통해 직접 앱을 사용하면 http://localhost:9292/
모든 것이 완벽하게 작동합니다. 연결은 지속적이며 모든 메시지가 모든 클라이언트에 전달됩니다.
그러나 Nginx,를 통과 http://chat.dev
하면 연결이 끊어지고 매초마다 재 연결이 발생합니다.
Nginx 설정은 나에게 괜찮아 보입니다.
upstream chat_dev_upstream {
server 127.0.0.1:9292;
}
server {
listen 80;
server_name chat.dev;
location / {
proxy_pass http://chat_dev_upstream;
proxy_buffering off;
proxy_cache off;
proxy_set_header Host $host;
}
}
시도 keepalive 1024
에 upstream
섹션뿐만 아니라 proxy_set_header Connection keep-alive;
에서 location
.
아무것도 도움이되지 않습니다 :(
클라이언트에 전달되지 않는 지속적인 연결 및 메시지가 없습니다.
Nginx 구성이 정확하고 몇 줄만 놓쳤습니다.
다음은 EventSource
Nginx를 통해 작업 하는 "마술 트리오"입니다 .
proxy_set_header Connection '';
proxy_http_version 1.1;
chunked_transfer_encoding off;
로 배치 location
부와 그것을 작동합니다.
추가해야 할 수도 있습니다.
proxy_buffering off;
proxy_cache off;
그것은 공식적인 방법이 아닙니다.
나는 이것을 "시행과 오류"+ "인터넷 검색"으로 끝냈다. :)
또 다른 옵션은 값이 'no'인 'X-Accel-Buffering'헤더를 응답에 포함하는 것입니다. Nginx는이를 특별히 취급합니다. http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_buffering을 참조 하십시오.
이것을 처음부터 직접 쓰지 마십시오. Nginx는 멋진 이벤트 서버이며 업스트림 서버의 성능 저하없이 SSE를 처리하는 모듈이 있습니다.
https://github.com/wandenberg/nginx-push-stream-module 확인
작동 방식은 구독자 (SSE를 사용하는 브라우저)가 Nginx에 연결하고 연결이 중지되는 것입니다. 게시자 (Nginx 뒤의 서버)는 해당 경로에서 Nginx에 POST를 보내고 그 순간 Nginx는 브라우저에서 대기중인 EventSource 리스너로 즉시 전달합니다.
이 방법은 루비 웹 서버가 이러한 "긴 폴링"SSE 연결을 처리하는 것보다 훨씬 더 확장 가능합니다.
참고 URL : https://stackoverflow.com/questions/13672743/eventsource-server-sent-events-through-nginx
'IT Share you' 카테고리의 다른 글
PHP fileinfo는 정의되지 않은 함수입니다. (0) | 2020.11.16 |
---|---|
N 문자마다 문자열에 구분 기호를 추가 하시겠습니까? (0) | 2020.11.16 |
Python에서 Selenium WebDriver로 부분 스크린 샷을 찍는 방법은 무엇입니까? (0) | 2020.11.16 |
bootstrap-datepicker로 선택한 날짜에 대한 변경 감지 (0) | 2020.11.16 |
“지원되는 최소 Gradle 버전은 2.14.1입니다. (0) | 2020.11.16 |