본문 바로가기
Language/JS

websocket 사용하기 (라이브러리X)

by 웹코기 2021. 6. 7.
반응형

안녕하세요 웹코기입니다.

 

저는 현재 사내에서 웹소켓을 이용해 실시간 채팅 기능을 구현하고 있습니다.

웹소켓은 개념 정도만 알고 있었는데, 역시 실제로 사용해보니 어떤 녀석인지 확 와닿더군요...!!

 

기존에 서버에서 통신할 땐

ajax나 axios만 사용했던 터라 단방향 통신에만 익숙했었는데요,

websocket을 이용해 양방향 통신을 해보니 신세계네요 :)

 

 

websoket.io나 다른 웹소켓 관련 라이브러리를 사용하면 더 편하게 사용할 수 있는 것으로 파악됐으나, 

저는 사내 프로젝트가 프런트엔드 프레임워크나 nodejs를 사용하지 않은 이미 날 것(?)의 재료를 썼으므로, 저 또한 날 것의 websocket을 쓰기로 했습니다.

 

 

 

아래는 라이브러리를 전혀 사용하지 않고 작업한 소스입니다.

웹에 갖다 붙이면 그대로 쓰실 수 있어요.

//////////////////////////////////////
//////// WebSocket Handler ///////////
//////////////////////////////////////
if (window["WebSocket"]) {
	var logMsgKey = 0;
	var msgKey = 0;
	var topicListObject = new Map();
	var topicListButtonMap = new Map();

	var websocketConnection = new WebSocket("ws://" + location.host + "/ws");

	websocketConnection.onclose = function (evt) {
		if (evt.wasClean) {
			console.log("[close] 커넥션이 정상적으로 종료되었습니다 + (code=" + evt.code + " reason=" + evt.reason + ")");
		} else {
			console.log("[close] 커넥션이 죽었습니다. + (code=" + evt.code + " reason=" + evt.reason + ")");
		}
	};

	websocketConnection.onopen = function (evt) {
		console.log('Connection onopen.');
	};

	websocketConnection.onerror = function (error) {
		console.log('Connection onerror.');
	};

	websocketConnection.onmessage = function (evt) {
		var messages = evt.data.split('\n');
		for (var index = 0; index < messages.length; index++) {])
			console.log(messages[index]);
		}
	};
} else {
	console.log("Your browser does not support WebSockets.");
}

 

1. 웹소켓 연결

2. 웹소켓 open

동작 순서로 이루어지고요!!

 

websocketConnection.send('메시지')

를 필요한 곳에서 사용하게 된다면, 서버를 통해 onmessage에서 해당 값을 실시간으로 받게 됩니다.

 

 

현재 작업한 이벤트는 

onclose, onopen, onerror, onmessage를 사용했는데요,

아래의 링크에 보시면 더 많은 재료를 확인하실 수 있습니다.

 

https://developer.mozilla.org/ko/docs/Web/API/WebSocket

 

WebSocket - Web API | MDN

WebSocket 객체는 서버와의 WebSocket 연결을 생성하고 관리할 수 있는 API 들을 제공합니다. 이는 데이터를 전송하거나 주고 받는 등의 API 들을 포함합니다.

developer.mozilla.org

 

 

반응형