WebSocket 과 Server-Sent Events 는 모두 데이터를 브라우저로 푸시 할 수 있습니다. 나에게 그들은 경쟁 기술인 것 같습니다. 그들 사이의 차이점은 무엇입니까? 언제 다른 것을 선택 하시겠습니까?
curl
.를 사용하여 SSE 서버에 요청을 열면됩니다 . HTTP를 통한 텍스트 형식이므로 진행 상황을 쉽게 확인할 수 있습니다.
WebSocket 과 Server-Sent Events 는 모두 데이터를 브라우저로 푸시 할 수 있습니다. 나에게 그들은 경쟁 기술인 것 같습니다. 그들 사이의 차이점은 무엇입니까? 언제 다른 것을 선택 하시겠습니까?
curl
.를 사용하여 SSE 서버에 요청을 열면됩니다 . HTTP를 통한 텍스트 형식이므로 진행 상황을 쉽게 확인할 수 있습니다.
답변:
웹 소켓과 SSE (Server Sent Events)는 데이터를 브라우저로 푸시 할 수 있지만 경쟁 기술은 아닙니다.
웹 소켓 연결은 브라우저로 데이터를 전송하고 브라우저에서 데이터를 수신 할 수 있습니다. 웹 소켓을 사용할 수있는 응용 프로그램의 좋은 예는 채팅 응용 프로그램입니다.
SSE 연결은 데이터를 브라우저로만 푸시 할 수 있습니다. 타임 라인 또는 피드를 업데이트하는 온라인 주식 시세 또는 트위터가 SSE의 혜택을받을 수있는 좋은 예입니다.
실제로 SSE로 수행 할 수있는 모든 것을 Websocket으로 수행 할 수 있기 때문에 Websockets는 많은 관심과 사랑을 받고 있으며 더 많은 브라우저가 SSE보다 Websocket을 지원합니다.
그러나 일부 유형의 응용 프로그램에는 무리가있을 수 있으며 SSE와 같은 프로토콜을 사용하여 백엔드를 쉽게 구현할 수 있습니다.
또한 SSE는 JavaScript 만 사용하여 기본적으로 지원하지 않는 구형 브라우저에 폴리 필 할 수 있습니다. SSE 폴리 필의 일부 구현은 Modernizr github 페이지 에서 찾을 수 있습니다 .
잡았다 :
www.example1.com
있고 다른 6 개의 SSE 연결을 열 수 있습니다 www.example2.com
(Fate 감사).HTML5Rocks 에는 SSE에 대한 유용한 정보가 있습니다. 해당 페이지에서 :
서버가 보낸 이벤트와 웹 소켓
WebSockets 대신 Server-Sent Events를 선택 하시겠습니까? 좋은 질문.
SSE가 섀도우로 유지 된 이유 중 하나는 WebSocket과 같은 API가 양방향 전이중 통신을 수행하기 위해보다 풍부한 프로토콜을 제공하기 때문입니다. 양방향 채널을 사용하는 것은 게임, 메시징 앱 및 양방향으로 거의 실시간 업데이트가 필요한 경우에 더 매력적입니다. 그러나 일부 시나리오에서는 클라이언트에서 데이터를 보낼 필요가 없습니다. 일부 서버 작업의 업데이트 만 있으면됩니다. 친구 상태 업데이트, 주식 시세 표시기, 뉴스 피드 또는 기타 자동화 된 데이터 푸시 메커니즘 (예 : 클라이언트 측 웹 SQL 데이터베이스 또는 IndexedDB 오브젝트 저장소 업데이트)이 몇 가지 예입니다. 서버로 데이터를 보내야하는 경우 XMLHttpRequest는 항상 친구입니다.
SSE는 기존 HTTP를 통해 전송됩니다. 즉, 작동하기 위해 특별한 프로토콜이나 서버 구현이 필요하지 않습니다. 반면에 WebSocket은 프로토콜을 처리하기 위해 전이중 연결 및 새로운 Web Socket 서버가 필요합니다. 또한 서버 전송 이벤트에는 자동 재 연결, 이벤트 ID 및 임의의 이벤트 전송 기능과 같이 WebSocket에 설계 상으로는 부족한 다양한 기능이 있습니다.
웹 소켓에 비해 SSE의 장점 :
SSE에 비해 웹 소켓의 장점 :
SSE의 이상적인 사용 사례 :
SSE 문제 :
caniuse.com에 따르면 :
클라이언트 전용 폴리 필을 사용하여 SSE 지원을 다른 많은 브라우저로 확장 할 수 있습니다. WebSockets에서는 가능성이 적습니다. 일부 EventSource 폴리 필 :
모든 브라우저를 지원해야하는 경우 web-socket-js , SignalR 또는 socket.io 와 같은 라이브러리를 사용하여 WebSockets, SSE, Forever Frame 및 AJAX long polling과 같은 다중 전송을 지원하십시오. 이것들은 종종 서버 쪽도 수정해야합니다.
SSE에 대한 자세한 내용은 다음을 참조하십시오.
다음에서 WebSocket에 대해 자세히 알아보십시오.
다른 차이점들 :
웹 소켓- 단일 TCP 연결을 통해 전이중 통신 채널을 제공하는 프로토콜입니다. 예를 들어 서버와 브라우저 사이의 양방향 통신 프로토콜이 더 복잡하기 때문에 서버와 브라우저는 웹 소켓 라이브러리에 의존해야합니다.socket.io
Example - Online chat application.
SSE (Server-Sent Event)-
서버 전송 이벤트의 경우 서버에서 브라우저로만 통신이 이루어지고 브라우저는 서버로 데이터를 보낼 수 없습니다. 이러한 종류의 통신은 주로 업데이트 된 데이터를 표시하기 만하면 데이터가 업데이트 될 때마다 서버가 메시지를 보냅니다. 예를 들어 서버와 브라우저 간의 단방향 통신. 이 프로토콜은 덜 복잡하므로 외부 라이브러리에 의존 할 필요가 없습니다. JAVASCRIPT 자체는 EventSource
서버가 보낸 메시지를 수신하기위한 인터페이스를 제공 합니다.
Example - Online stock quotes or cricket score website.
한 가지 알아 두어야 할 점 :
웹 소켓 및 회사 방화벽에 문제가 있습니다. (HTTPS를 사용하면 도움이되지만 항상 그런 것은 아닙니다.)
참조 https://github.com/LearnBoost/socket.io/wiki/Socket.IO-and-firewall-software https://github.com/sockjs/sockjs-client/issues/94을
나는 가정 서버 전송 이벤트에 많은 문제가되지 않습니다. 그러나 나는 모른다.
WebSockets는 엄청나게 재미 있습니다. 웹 소켓을 사용하는 작은 웹 게임이 있습니다 (Socket.IO를 통해) ( http://minibman.com )
최대 연결 제한은 http2 + sse의 문제가 아닙니다.
http 문제 1