๐ฉ ๋ฌธ์  ํ์
๋ฌธ์ ์ ์ ์ํ๋ฉด ์ฑํ ์ฐฝ ๋ชจ์ต์ ํ์ธํ ์ ์๋ค. ์๋ฌด ๊ฐ์ ์ ๋ ฅํ๋ ๋ช ๋ น์ด๋ฅผ ์ฐพ์ ์ ์๋ ๋ฌธ๊ตฌ๋ฅผ ํ์ธํ ์ ์๋ ๊ฒ์ผ๋ก ๋ณด์ 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 ๊ฐ์ ํ๋ํ ์ ์๋ค!