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