๐ฉ ๋ฌธ์ ํ์
๋ฌธ์ ์ ์ ์ํ๋ฉด ์ฑํ ์ฐฝ ๋ชจ์ต์ ํ์ธํ ์ ์๋ค. ์๋ฌด ๊ฐ์ ์ ๋ ฅํ๋ ๋ช ๋ น์ด๋ฅผ ์ฐพ์ ์ ์๋ ๋ฌธ๊ตฌ๋ฅผ ํ์ธํ ์ ์๋ ๊ฒ์ผ๋ก ๋ณด์ CLI๋ฅผ ๊ตฌํํด ๋์ ๊ฒ์ผ๋ก ์ ์ถํ ์ ์๋ค.
help
๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ๋ ์ฌ์ฉ๊ฐ๋ฅํ ๋ช
๋ น์ด๋ฅผ ํ์ธํ ์ ์์๊ณ , ๋ค๋ฅธ ๋ช
๋ น์ด๋ฅผ ์คํํ ๊ฒฐ๊ณผ ์์ ๊ฐ์ ์๋ต์ ํ์ธํ ์ ์๋ค.
id
๋ช
๋ น์ด๋ฅผ ํตํด ํ์ฌ ์ฌ์ฉ์๊ฐ admin ๊ถํ์ ๊ฐ์ง๊ณ ์๋ ๊ฒ์ ํ์ธํ์์ผ๋, flag
๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
์์ค์ฝ๋๋ฅผ ํ์ธํด๋ณด์.
1
2
3
4
5
6
7
8
9
10
11
12
13
$(function () {
var username = "guest";
var socket = io();
$('form').submit(function(e){
e.preventDefault();
socket.emit('cmd',username+":"+$('#m').val());
$('#m').val('');
return false;
});
socket.on('cmd', function(msg){
$('#messages').append($('<li>').text(msg));
});
});
script
ํ๊ทธ ๋ด์์ ์์ ๊ฐ์ javascript ์ฝ๋๋ฅผ ํ์ธํ ์ ์์๋ค. ํด๋น ์คํฌ๋ฆฝํธ์ ์ญํ ์ ๋ถ์ํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
var socket = io();
์ ๋ช ๋ น์ ํตํด Socket.io ๋ชจ๋์ ์ฌ์ฉํ๋ค. Socket.io๋ node.js ๊ธฐ๋ฐ ์ค์๊ฐ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ง์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก, ์ค์๊ฐ ์ฑํ ์ ๊ตฌํํ ๋ ์ฌ์ฉ๋๋ค.
socket.emit('cmd',username+":"+$('#m').val());
socket.emit ๋ช ๋ น์ด๋ ์๋ฒ ์ชฝ์์ event๋ฅผ ๋ฐ์์ํค๋ ํจ์๋ก, ์ฒซ ๋ฒ์งธ ์ธ์๋ event์ ์ด๋ฆ์, ๋ ๋ฒ์งธ ์ธ์๋ก๋ ํด๋น ์์ผ์ ํตํด ํด๋ผ์ด์ธํธ์๊ฒ ๋ฉ์์ง๋ฅผ ์ ๋ฌํ๋ค. ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ๊ฐ์ cmd ๋ช ๋ น์ด๋ก ์คํํ๋ค. ์ด๋, username ๋ณ์ ๊ฐ์ ๋ช ๋ น ์์ ๋ถ์ฌ ์ฌ์ฉํ๋๋ฐ ์ด๋ ํด๋น ์ฌ์ฉ์์ ๊ถํ์ผ๋ก ๋ช ๋ น์ด๋ฅผ ์คํํจ์ ์๋ฏธํ๋ค. ์ฌ๊ธฐ์ username ๋ณ์ ๊ฐ์ โguestโ๋ก ๋์ด์๋ค.
socket.on('cmd', function(msg){ $('#messages').append($('<li>').text(msg)); });
socket.on ๋ช ๋ น์ด๋ ์ฒซ ๋ฒ์งธ ์ธ์๋ก ๋ฐ์ event๊ฐ ํด๋ผ์ด์ธํธ์์ emit ๋๋ฉด, ๋ ๋ฒ์งธ ์ธ์๋ก ๋ฐ์ ์ฝ๋ฐฑ ํจ์๋ฅผ ์คํํ๋ค. ์๋ต์ ์์ ํ๋ ๊ธฐ๋ฅ์ผ๋ก ์์์ ์ ๋ฌํ ๋ช ๋ น์ด๋ฅผ ์คํํ ๊ฒฐ๊ณผ ๊ฐ์ ์ถ๋ ฅํ๋ ์ญํ ์ ํ๋ค.
์ฐ๋ฆฌ๋ socket ํต์ ์ ํตํด admin์ผ๋ก flag ๋ช ๋ น์ด๋ฅผ ์คํํ๊ณ ๊ฒฐ๊ณผ ๊ฐ์ ์์ ๋ฐ์ผ๋ฉด ๋๋ ๋ฌธ์ ์ด๋ค.
๐ฉ ๋ฌธ์ ํ์ด
1
2
3
4
var socket = io(); // ์์ผ ํต์ ์ ์์
socket.emit('cmd','admin:flag'); // cmd ์ด๋ฒคํธ๋ก admin:flag๋ฅผ ์คํํ๋๋ก ํ๋ค
socket.on('cmd', function(res) {console.log(res)}); // cmd ๋ช
๋ น ์คํ ๊ฐ์ ์ฝ์ ์ฐฝ์ ์ถ๋ ฅํ๋ค.
์ฝ์ ์ฐฝ์์ ์์ ์ฝ๋๋ฅผ ์คํํ๋ค.
๊ทธ๋ผ ์์ ๊ฐ์ด flag ๊ฐ์ ํ๋ํ ์ ์๋ค!