출처: https://ko.javascript.info/websocket
new WebSocket(url)
let socket = new WebSocket("wss://javascript.info/article/websocket/demo/hello");
onopen
socket.onopen = function(e) {
alert("[open] 커넥션이 만들어졌습니다.");
alert("데이터를 서버에 전송해봅시다.");
socket.send("My name is Bora");
// 'My name is Bora'라는 메시지를 서버로 보냄
};
onmessage
socket.onmessage = function(event) {
alert(`[message] 서버로부터 전송받은 데이터: ${event.data}`);
};
onclose
socket.onclose = function(event) {
if (event.wasClean) {
alert(`[close] 커넥션이 정상적으로 종료되었습니다(code=${event.code} reason=${event.reason})`);
} else {
// 예시: 프로세스가 죽거나 네트워크에 장애가 있는 경우
// event.code가 1006이 됩니다.
alert('[close] 커넥션이 죽었습니다.');
}
};
onerror
socket.onerror = function(error) {
alert(`[error]`);
};
<form name="publish">
<input type="text" name="message">
<input type="submit" value="send">
</form>
let url ='ws://localhost:8080/ws';
let socket = new WebSocket(url);
'localhost:8080/ws'라는 주소의 서버와 소켓을 연결한다.
document.forms.publish.onsubmit = function() {
let outgoingMessage = this.message.value;
const obj = { "type": "message" , "params": { "value": outgoingMessage }}
socket.send(JSON.stringify(obj));
return false;
};
form에 onsubmit
객체를 찾아서 함수를 실행한다.
name
속성이 message
라는 input
태그에 담긴 값을 가져와서 변수(outgoingMessage)
에 저장한다.
웹소켓으로 데이터를 보내기 위해 객체 형태에 params
> value
값에 변수(obj)
를 담는다.
변수를 JSON
문자열로 변환해서 웹소켓으로 보낸다.
false
를 return
한다.
onsubmit()
: <form>
태그의 submit을 제어할 수 있는 함수
대개는 form 안의 데이터 유효성을 검사하기 위해 쓰인다고 한다.
함수의 return
값으로는 true
또는 false
를 반환할 수 있다.
지정해주지 않으면 무조건 submit
으로 넘어가는 문제가 발생한다.
둘의 차이가 궁금해서 return true
로 변경해봤더니 404 Not Found
에러가 발생했다.
submit
후에도 이동하지 않고 계속 같은 페이지에 머물기 위해 false
를 설정해야 하는 것 같다.
JSON.stringfy()
: JS 객체를 JSON 문자열로 변환JSON.parse()
: JSON 문자열을 JS 객체로 변환 // 들어오는 메세지 핸들링
socket.onmessage = function(event) {
let incomingMessage = event.data;
showMessage(incomingMessage);
};
// dev에 메세지 더하기
function showMessage(message) {
let messageElem = document.createElement('div');
const obj = JSON.parse(message);
messageElem.textContent = obj.params.value;
document.getElementById('messages').prepend(messageElem);
}
div
태그를 생성해서 변수(messageElem)
에 담고
message
를 JS 객체로 변환하고 변수(obj)
에 담는다.
div
태그에 obj > params > value 값을 텍스트로 담는다.
messages
라는 id
를 가진 div
요소 앞에 message
를 추가한다.
socket.onclose = event => console.log(`Closed ${event.code}`);
<div id="messages"></div>