포스트

SSE 사용하기

안녕하세요 🐸

SSE(Server-Sent-Event)

서버의 데이터를 실시간으로 클라이언트에게 보내는 이벤트 입니다.
실시간 통신이라는 점은 웹소켓과 유사합니다.
하지만 SSE는 서버에서 클라이언트로 보내는 단방향 통신만 가능합니다.
실시간 통신은 필요하지만 양방향일 필요는 없는 경우 적절하게 쓸 수 있습니다.

구현하기

구현 방법은 웹소켓의 구현 방법과 유사합니다.
단, 구버전 익스플로러 사용자는 클라이언트 측에서 별도의 스크립트를 삽입해줘야 합니다.

클라이언트

대부분의 클라이언트는 EventSource 를 지원합니다.

1
2
3
4
5
6
7
8
<script>
	// sse 미들웨어를 사용하면 기본 경로는 /sse
	const es = new EventSource('/sse');
	es.onmessage = function(e){
		const data = e.data;
		console.log('data',data);
	}
</script>

구버전 익스플로러에서는 EventSource가 지원되지 않기 때문에 아래 스크립트를 추가로 삽입합니다.

1
<script src="https://unpkg.com/event-source-polyfill/src/eventsource.min.js"></script>

서버

SSE 미들웨어 설치

1
npm i sse

SSE 연결

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/*
	file:app.js 
*/
const SSE = require('sse');
/*생략*/
const server = app.listen(app.get('port'), () => {
  console.log(app.get('port'), '번 포트에서 대기중');
});

// 생성자의 두 번째 파라미터로 옵션을 전달 할 수 있다
const sse = new SSE(server);
sse.on('connection',(client)=>{
	setInterval(()=>{
		client.send(Date.now().toString());
	},1000);
})

SSE 미들웨어도 socket.io 처럼 path 옵션을 통해 SSE 연결할 URL을 설정합니다.
기본값은 /sse 입니다.

만약 URL을 변경하고 싶다면 아래와 같이 해야합니다.

1
2
3
const sse = new SSE(server,{
	path:'/sseTest'
})

클라이언트는 이와 맞춰 EventSource 를 변경합니다.

1
2
3
<script>
	const es = new EventSource('/sseTest');
</script>

연결 확인


/sse 로 연결이 되었음을 확인할 수 있습니다.
서버에서 보내지는 데이터는 EventStream 탭에서 확인 가능합니다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.