본문 바로가기

Node

웹소켓 열기 - websocket, websocket

먼저 웹소켓을 열어보자.

왼쪽에 화면을 띄우고 마우스를 움직이면 콘솔에 위치를 찍는다.

 

 

// 여기는 native websocket을 사용한다.

// live servr를 extension에서 설치한다.
// client에서 live server 실행

const ws = new WebSocket('ws://localhost:7071/ws')

// 화면이 서버의 메시지를 받는다.
ws.onmessage = (websSocketMessage) => {
    console.log(websSocketMessage)
    console.log(websSocketMessage.data);
}

// 클라의 마우스 움직임을 서버에 보낸다.
document.body.onmousemove = (event) => {
    const messageBody = {
        x: event.clientX,
        y: event.clientY
    }
    ws.send(JSON.stringify(messageBody));
}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body style="height: 100vh;">
    <script src="index.js"></script>
</body>
</html>
// npm init -y로 패키지를 생성한다. server 터미널에서 실행
// 배경은 material icon theme이 제일 괜찮다.

// websocket을 사용할거라 npm install ws

// server에서 node index.js로 실행 

const WebSocket = require('ws');
const wss = new WebSocket.Server({ port : 7071 });

// 서버가 클라에 보낸다. connected를 
// 그 이후에 클라가 보낸 마우스 움직임을 콘솔에 출력 
wss.on('connection', (ws) => {
    ws.send('connected');

    ws.on('message', (messageFromClient) => {
        const message = JSON.parse(messageFromClient);
        console.log(message);
    })
})

 

 

근데 이걸 보면 문제는 왼쪽에는 웹소켓 네이티브를 쓴는데 오른쪽은 ws 모듈을 받아 쓴다

 

이걸 websocket io로 해결하자.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <ul></ul>
    <input placeholder="message" />
    <button>Send</button>
    <script src="http://cdn.socket.io/socket.io-3.0.0.js"></script>
    <script src="index.js"></script>
</body>
</html>
const socket = io('ws://localhost:8080');

socket.on('message', text =>{
    const element = document.createElement('li');
    element.innerHTML = text;
    document.querySelector('ul').appendChild(element);
})

document.querySelector('button').onclick = () => {
    const text = document.querySelector('input').value;
    socket.emit('message', text);
}
// npm install socket.io로 깔자
// npm init -y 도 한번 해주자.

const http = require('http').createServer();

// 웹소켓 서버를 생성한다. 서버는 http를 기반으로 한다.
const io  = require('socket.io')(http, {
    // 모든 출처에서의 요청을 허용한다는 뜻. 다른 도메인에서 이 서버에  접근 가능
    cors: {origin: '*'}
})

// connection이 일어나면 실행
io.on('connection', (socket) => {
    console.log('a user connected');

    // 메시지가 오면 메시지를 다른 사람에게 전달한다. 
    // emit으로 데이터를 보낸다.
    socket.on('message', (message) => {
        io.emit('message', `${socket.id.substr(0,2)} said ${message}`)
    })
})

const port = 8080;
http.listen(port, () =>{
    console.log('8080 포트에서 서버 실행')
})

 

 

이렇게 소통이 가능하다.

 

 

'Node' 카테고리의 다른 글

도커에 몽고디비 설치하기  (1) 2024.08.19
jwt  (0) 2024.08.03
간단한 api, get, post, delete, put  (0) 2024.07.29
javascript 함수 4가지  (0) 2024.07.28
express generator  (0) 2024.07.28