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);
});