Socket.IO
Client.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Socket.io Test</title>
<script src="https://cdn.socket.io/socket.io-3.0.1.min.js"></script>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<style>
* {
box-sizing: border-box;
}
#chatContent {
border: 1px solid #000;
width: 100%;
height: 200px;
margin-bottom: 10px;
overflow-y: auto;
}
#myChat {
width: 100%;
}
</style>
</head>
<body>
<div id="chatContent"></div>
<input id="myChat" type="text" />
<script>
const socket = io.connect('http://localhost:3000');
socket.on('msg', function (data) {
$('#chatContent').append(`${data}<br>`);
});
$('#myChat').on('keyup', function () {
if (window.event.keyCode == 13) {
$('#chatContent').append(`Client : "${$(this).val()}" ๋ณด๋
๋๋ค.<br>`);
socket.emit('msg', $(this).val());
$(this).val('');
}
});
</script>
</body>
</html>
๋จผ์ ํด๋ผ์ด์ธํธ์์ ๋ณด์ฌ์ค ๊ฐ๋จํ ํ๋ฉด์ ๋ง๋ค์ด ๋ณด์๋ค.
const socket = io.connect('http://localhost:3000');
htmlํ์ผ์ ๋งค์ฐ ๊ธฐ๋ณธ์ ์ธ ๋ด์ฉ๋ง ํฌํจํ๊ณ ์๋ ์ฝ๋์ด๋ค.
socket ๋ชจ๋์ ์ฌ์ฉํ์ฌ ์๋ฒ์ 3000๋ฒ ํฌํธ์์ ํ ์คํธ๋ฅผ ์งํํ ๊ฒ์ด๋ค.
io.connect๋ ์๋ฒ์์ ์ฐ๊ฒฐ์ ํ๊ธฐ ์ํ ์ฝ๋์ด๋ค.
tcpServer.js
const bodyParser = require('body-parser');
const express = require('express');
const app = express();
const http = require('http').createServer(app);
const io = require('socket.io')(http);
const port = 3000;
const user = {
id: 'test',
password: '1234',
}; // ๋ฐ์ดํฐ ๋ฒ ์ด์ค๋ฅผ ๋์ ํด์ค user ์ ๋ณด
app.get('/', (req, res) => {
res.sendFile(__dirname + '/client.html');
});
app.get('/login', (req, res) => {
res.sendFile(__dirname + '/login.html');
});
app.post('/login', (req, res) => {
console.log(req.body);
const id = req.body.user_id;
const password = req.body.user_pwd;
console.log(id);
if (id === user.id && password === user.password) res.redirect('/');
// ๋ฐ์ดํฐ ๋ฒ ์ด์ค ์ฐ๊ฒฐ์ ํ๊ฒ ๋๋ฉด ์ฟผ๋ฆฌ๋ฌธ์ด ๋ค์ด๊ฐ๊ฒ ๋จ
else res.send('์์ด๋๋ ๋น๋ฐ๋ฒํธ๊ฐ ํ๋ ธ์ต๋๋ค. ');
});
http.listen(port, () => {
console.log(`Listening on ${port}`);
});
io.on('connection', (socket) => {
console.log(socket.id, 'Connected');
socket.emit('msg', `${socket.id}๊ฐ ์ฐ๊ฒฐ ๋์์ต๋๋ค. `);
socket.on('msg', (data) => {
console.log(socket.id, data);
var result = '';
for (let i = 0; i < data.length; i++) {
if (data[i] === data[i].toUpperCase()) {
result += data[i].toLowerCase();
} else {
result += data[i].toUpperCase();
}
}
socket.emit('msg', `Server: ${result}๋ฅผ ๋ฐ์์ต๋๋ค. `);
});
});
NodeJS์์ express๋ฅผ ์ฌ์ฉํ์ฌ app๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ http ์๋ฒ๋ฅผ ๋ง๋ ๋ค.
๋ํ socket.io ๋ชจ๋์ ์ฌ์ฉํ๋๋ก ํ๋ค.
app.get('/', (req, res) => {
res.sendFile(__dirname + '/client.html');
});
์ฌ๊ธฐ์ localhost:3000/์ผ๋ก ์ ๊ทผํ๋ฉด client.html ํ์ผ์ ๋ ๋๋ง ํด์ค๋ค.
์์ผ์ ์ฐ๊ฒฐํ๊ธฐ ์ ์ socket ๋ชจ๋์ ์ฃผ์ ๋ฉ์๋๋ฅผ ์์๋ณด์.
๋ฉ์๋๋ช | ์ค๋ช |
socket.on('methodName', callback Function(data){}) | ์์ผ์ ์ฐ๊ฒฐ๋ ๋ธ๋ผ์ฐ์ ๋ ์๋ฒ์์ ๋ฉ์๋๋ช ์ ํ๋ผ๋ฏธํฐ๋ก ๊ฐ๋ emit์ ํธ์ถํ๊ฒ ๋๋ฉด ์ดํ ์ฝ๋ฐฑํจ์๊ฐ ๋์ํ๊ฒ ๋๋ค. emit ๋ฉ์๋์ ํ๋ผ๋ฏธํฐ๋ฅผ data๋ก ๋ฐ์์ ์ ์ ํ ๋์์ ์ํํ๋ค. |
socket.on('connection', function(socket)) | ์์ผ ์ฐ๊ฒฐ์ ์ํด ํ์์ ์ผ๋ก ์ํ๋์ผ ํ๋ ํจ์. function์ ํ๋ผ๋ฏธํฐ๋ก ์์ผ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค. |
socket.emit('methodName', data) | ์์ผ ์ฐ๊ฒฐ๋ ๋ธ๋ผ์ฐ์ /์๋ฒ์์ ๋ฉ์๋๋ช ์ ๊ฐ๋ on ํจ์๋ฅผ ํธ์ถ ํ๋ค. ์ด๋ on ํจ์์ ํ์ํ ๋ฐ์ดํธ๋ฅด data๋ก ํจ๊ป ์ ์กํ๋ค. |
socket.join('SpaceName') | '๊ณต๊ฐ๋ช '์ ํค๋ก ํ์ฌ ์์ผ๋ค์ ๊ด๋ฆฌํ ์ ์๊ฒ ํด์ฃผ๋ ๋ฉ์๋ |
socket.emit์ ํตํด ํด๋ผ์ด์ธํธ์ socket id๋ฅผ ๋ณด๋ด์ฃผ์ด ์ด๋ ์์ผ๊ณผ ์ฐ๊ฒฐ๋์ด ์๋์ง ํ์ธ์ด ๊ฐ๋ฅํ๋ค.
๊ทธ๋ฆฌ๊ณ Server์์ Client์์ ๋ณด๋ด์จ ๋ฐ์ดํฐ๊ฐ ์๋ฌธ์๋ฉด ๋๋ฌธ์๋ก ๋ฐ๊พธ์ด์ฃผ๊ณ ๋๋ฌธ์๋ฉด ์๋ฌธ์๋ก ๋ฐ๊พธ์ด์ค๋ค.
์ด๋ Client์์ ๋ณด๋ด์จ ๋ฐ์ดํฐ๊ฐ ์๋ฌธ์์ธ์ง ๋๋ฌธ์์ธ์ง ๊ตฌ๋ณํ๊ธฐ ์ํด ํ๋์ฉ ๊ฒ์ฌ๋ฅผ ํด์ฃผ๋๋ก ํ์๋ค.
๊ธ์๋ฅผ ๋๋ฌธ์๋ก ๋ฐ๊พธ์์ ๋ ๊ธฐ์กด์ ๊ธ์์ ๊ฐ๋ค๋ฉด ๋๋ฌธ์์ด๋ฏ๋ก ์๋ฌธ์๋ก ๋ฐ๊พธ์ด ์ฃผ๊ณ ๊ทธ ์ธ์ ๊ฒฝ์ฐ๋ ๋ชจ๋ ๋๋ฌธ์๋ก ๋ฐ๊พธ์ด ์ค๋ค.
nodemon์ ์ฌ์ฉํ์ฌ tcpServer.js ๋ฅผ ์คํํ์ฌ ์ค๋ค.
์๋ฒ๋ฅผ ํค๊ณ localhost:3000์ ์ ์ํ๋ฉด ์๋์ ๊ฐ์ด ๋์ค๊ฒ ๋๋ค.
์๋ฒ์ ํด๋ผ์ด์ธํธ๊ฐ ์ฐ๊ฒฐ๋์์์ ์ ์ ์๋ค.
์๋์ ๋ด์ฉ์ ์ ๋ ฅํ๋ฉด ๋๋ฌธ์๋ ์๋ฌธ์๋ก, ์๋ฌธ์๋ ๋๋ฌธ์๋ก ๋ฐ๊ฟ์ฃผ๊ฒ ๋๋ค.
[ํ๊ณ ]
nodeJS๋ฅผ ์ฐ๋ฉด์ ์ฌ๋ฌ๊ฐ์ง API๋ฅผ ๋ง๋ค์ด ๋ณด์์ง๋ง Socket.IO๋ ์ฒ์ ์ฌ์ฉํด ๋ณด์๋ค. ๋คํธ์ํฌ์์ ๋ฐฐ์ด HTTP์ TCP ํ๋กํ ์ฝ์ ์ฌ์ฉํ์ฌ ๊ตฌํํ์๋๋ฐ ๋คํธ์ํฌ์ ๋ํ ์ดํด๋ ๋๊ณ ์ฒ์ ํด๋ณด๋ ์์ผํ๋ก๊ทธ๋๋ฐ์ด์ด์ ์ฑํ ์ ๋ ์์ธํ๊ฒ ๊ตฌํํด๋ณด๊ณ ์ถ์ ๋ง์์ด ์๊ฒผ๋ค. ํด๋ผ์ด์ธํธ ์ชฝ์ ์ ์์ง ๋ชปํด์ ์ ๋๋ก ํ์ง ๋ชปํ๋๋ฐ ์๊ฐ์ด ๋๋ค๋ฉด ์ ๋๋ก ๋ค์ ๊ตฌํํด๋ณด๊ณ ์ถ๋ค.
'๐ป BackEnd > ๐ฉ NodeJS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Network] [NodeJS] ๊ฐ๋จํ ๋ก๊ทธ์ธ ๊ตฌํ (0) | 2022.05.02 |
---|---|
[NodeJS] ์ฌ์ฉ์ ํ์๊ฐ์ (0) | 2022.03.27 |
[NodeJS] ํ๋ก์ ํธ ํด๋ ๊ตฌ์กฐ ๋ง๋ค๊ธฐ (0) | 2022.03.23 |