Socket.io

  • ํ˜ธํ™˜๋˜๋Š” ๊ธฐ์ˆ  ์ž๋™ ์„ ํƒ ex) websocket, ajax, polling
  • npm install socket.io

Socket.io ์„œ๋ฒ„ ์ƒ์„ฑ

  • var Server = require('socket.io')
  • var io = new Server(httpServer);
  • ์ถ•์•ฝ๋ฒ„์ ผ : var io = require('socket.io')(server)

Event

  • connection
var express = require('express');
var http = require('http');
var app = express();
 
var server = http.createServer(app);
server.listen(3000);
 
app.get('/', function(req, res) {
    res.sendFile(__dirname + '/client.html');
});
 
var io = require('socket.io')(server);
io.on('connect', function(socket) {
   console.log('ํด๋ผ์ด์–ธํŠธ ์ ‘์†');
 
   socket.on('disconnect', function() {
      console.log('ํด๋ผ์ด์–ธํŠธ ์ ‘์† ์ข…๋ฃŒ');
   });
    setInterval(function(){
       socket.emit('message', '๋ฉ”์„ธ์ง€');
   }, 3000);
 
});

Socket.io Client

  • <script src="/socket.io/socket.io.js"></script>
  • var socket = io();
<script src="/socket.io/socket.io.js"></script>
<script>
    var socket = io();
 
    socket.on('connect', function() {
       console.log('์„œ๋ฒ„์™€ ์—ฐ๊ฒฐ');
    });    
 
</script>

Event

  • connect
  • error
  • disconnect
  • reconnect : ์ž๋™ ์žฌ์ ‘์† ์‹œ๋„

๋ฐ์ดํ„ฐ ๊ตํ™˜

  • socket.emit('Event', data); : ์ „์†ก

  • socket.on('Event',function(data)) : ์ˆ˜์‹ 

  • Server

  socket.emit('message', '๋ฉ”์„ธ์ง€');
  • Client
socket.on('message', function(msg) {
    document.writeln('<li>');
    document.writeln(msg);
    document.writeln('</li>');
});

BroadcaseEvent

  • socket.io.emit('BroadcaseEvent',data)
  • io.emit('BroadcaseEvent',data) : socket ์ƒ๋žต ๊ฐ€๋Šฅ

Namespace & Room

  • ๊ฐ™์€ Namespace์—์„œ๋งŒ ๋ฉ”์‹œ์ง€ ์ฃผ๊ณ  ๋ฐ›์Œ
  • Default-Namespace : /

Namespace Setting

  • var nsp = io.of('/Custom-Namespace'); : Server

  • var nsp = io('/Custom-Namespace'); : Client

  • Server

var io = require('socket.io')(server);
var system = io.of('/system');
system.on('connect', function(socket) {
   console.log('ํด๋ผ์ด์–ธํŠธ ์ ‘์†');
});
system.emit('message','Notice!');
  • Client
var socket = io();
var system = io.of('http://nelp.kr/system');
system.on('connect', function(socket) {
   console.log('ํด๋ผ์ด์–ธํŠธ ์ ‘์†');
});
system.on('message', function(data){
  alert('System Message' + data);
});

Room

  • Namespace ๋‚ด ์ฑ„๋„

  • ๊ฐ™์€ Room์—์„œ๋งŒ ๋ฐ์ดํ„ฐ ๊ตํ™˜

  • ๋ฃธ์— ์ž…์žฅ(join), ์—ฌ๋Ÿฌ ๋ฃธ์— ์ž…์žฅ ๊ฐ€๋Šฅ

  • ๋ฃธ์—์„œ ๋– ๋‚˜๊ธฐ(leave)

  • Server

var room;
 
socket.on('joinRoom',function(data){
    // ๊ธฐ์กด ๋ฐฉ์—์„œ ๋‚˜์˜ค๊ธฐ
    socket.leave(room);
 
    // ์ƒˆ๋กœ์šด ์ฑ„ํŒ…๋ฐฉ ์ž…์žฅ
    room = data.room;
    socket.join(room);
});
// ์ฑ„ํŒ… ๋ฉ”์‹œ์ง€, ๋ฃธ์œผ๋กœ(to) ์ „์†ก
socket.on('chatinput',function(data){
  io.to(room).emit('chatMessage',chat);
});
  • Client
// ๋ฃธ์— ์ž…์žฅ
socket.emit('joinRoom', {room:room});
// ์ฑ„ํŒ… ๋ฉ”์‹œ์ง€, ๋ฃธ์œผ๋กœ(to) ์ „์†ก
socket.on('chatMessage',function(data){
  var msg = data['msg'];
  var nick = data['nick'];
  var str = nick + ' : ' + msg;
 
  $('#messages').append($'<li>').text(str);
});