728x90
간단한 메세지 데이터 전송 소스
클라이언트 코드
<!-- 메시지 폼 -->
<form name="publish">
<input type="text" name="message">
<input type="submit" value="send">
</form>
<script>
let url ='ws://localhost:8080/ws';
let socket = new WebSocket(url);
// 폼에 있는 메세지 보내기
document.forms.publish.onsubmit = function() {
let outgoingMessage = this.message.value;
const obj = { "type": "message" , "params": { "value": outgoingMessage }}
socket.send(JSON.stringify(obj));
return false;
};
// 들어오는 메세지 핸들링
socket.onmessage = function(event) {
let incomingMessage = event.data;
showMessage(incomingMessage);
};
socket.onclose = event => console.log(`Closed ${event.code}`);
// dev에 메세지 더하기
function showMessage(message) {
let messageElem = document.createElement('div');
const obj = JSON.parse(message);
messageElem.textContent = obj.params.value;
document.getElementById('messages').prepend(messageElem);
}
</script>
<!-- 수신받을 메시지가 노출될 div -->
<div id="messages"></div>
서버 코드
const http = require('http');
const fs = require('fs');
const ws = new require('ws');
const wss = new ws.Server({noServer: true});
const clients = new Set();
function accept(req, res) {
if (req.url == '/ws' && req.headers.upgrade && req.headers.upgrade.toLowerCase() == 'websocket' && req.headers.connection.match(/\\bupgrade\\b/i))
{
wss.handleUpgrade(req, req.socket, Buffer.alloc(0), onSocketConnect);
}
else if (req.url == '/')
{
// index.html
fs.createReadStream('./index.html').pipe(res);
}
else
{
// page not found
res.writeHead(404);
res.end();
}
}
function onSocketConnect(ws) {
clients.add(ws);
console.log(`new connection`);
ws.on('message', function(message) {
const obj = JSON.parse(message);
console.log("message received: ", obj);
for(let client of clients) {
client.send(JSON.stringify(obj));
}
});
ws.on('close', function() {
console.log(`connection closed`);
clients.delete(ws);
});
}
http.createServer(accept).listen(8080);
위 코드 작성 후 npm i ws 설치 후 node app.js 입력한 후 익스플러로 index.html 을 실행하게 되면 콘솔창에 new connection 이 뜨게 된다.
메세지 send 시 아래 쪽에 남게 된다.
창 을 닫게 되면 connection closed 가 뜬다.
handleUpgrade()메서드는 wss HTTP 업그레이드 요청을 처리하는 데 사용되는 WebSocket 서버(이 경우) 의 메서드입니다. Upgrade이 메서드는 클라이언트가 다른 프로토콜(이 경우 WebSocket 프로토콜)로 연결을 업그레이드하려고 함을 나타내는 헤더 가 포함 된 HTTP 요청을 서버가 수신할 때 호출됩니다 .
이 handleUpgrade()메서드는 다음 인수를 사용합니다.
- req : HTTP 업그레이드 요청을 나타내는 요청 객체입니다.
- req.socke: 클라이언트와 서버 간의 연결을 나타내는 소켓 개체입니다.
- Buffer.alloc(0)onSocketConnect: 길이가 0바이트인 비어 있는 새 버퍼를 생성합니다. 이 버퍼는
- 콜백을 위한 WebSocket 데이터로 사용됩니다.
- onSocketConnect: WebSocket 연결이 설정되면 호출되는 콜백 함수입니다.
이 handleUpgrade()메서드는 WebSocket 프로토콜에 대한 연결을 업그레이드 onSocketConnect하고 업그레이드된 소켓 개체를 인수로 사용하여 콜백을 호출합니다.
'코딩캠프 > 내일배움캠프' 카테고리의 다른 글
[ TIL ] 01.13(금) 45일차 (0) | 2023.01.13 |
---|---|
[ TIL ] 01.12(목) 44일차 (0) | 2023.01.12 |
[ TIL ] 01.10(화) 42일차 (0) | 2023.01.10 |
[ TIL ] 01.09(월) 41일차 (0) | 2023.01.09 |
[ WIL ] 01.02~06 8주차 (0) | 2023.01.08 |