SlideShare a Scribd company logo
Startup JavaScript
9. Socket.IO 및 Node.JS 고급
THINKER TO MAKER
x
Socket.IO
THINKER TO MAKER
Real-Time Application
Socket.IO
JavaScript 를 이용하여 실시간 어플리케이션을 구축할 수 있도록 하는 엔진.
양 방향의 이벤트 기반의 통신이 가능하고, 모든 플랫폼과 장치에서 동작
실시간으로 차트나 로그 데이터를 전달하여 표시
실 시간 분석
몇 줄의 코드만으로 채팅 어플리케이션 개발 가능
인스턴스 메신져
이미지, 오디오, 비디오 같은 이진 데이터 전달 가능
바이너리 스트리밍
상대방의 수정 내역을 보면서 동시 문서 수정
문서 협업
Hello Socket.IO
Express 와 Http 모듈과 연동하여 웹 통신 포트로 실시간 서버 구축 가능
웹 파일에서는 Socket.IO 클라이언트가 제공되어 손쉽게 구축 가능
$ npm install socket.io
Socket.IO 설치
<script
src='/socket.io/socket.io.js'></script
>
<script>
var socket = io();
socket.on('news', function(data){
document.write(JSON.stringify(data));
socket.emit('feedback',{ hello :
'world2' });
});
</script>
var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);
server.listen(80);
// 기본 접속 경로
app.get('/', function (req, res) {
res.sendFile(__dirname +
'/sample1.html');
});
// 외부 접속시 처리
io.on('connection', function (socket) {
// 접속한 모든 클라이언트에 전달
socket.emit('news', { hello: 'world1' });
// Client 로 부터 수신받는 event
socket.on('feedback', function (data) {
console.log(data);
});
});
데이터 전달 방식
THINKER TO MAKER
Unicast, Broadcast
Unicast, Multicast
특정 소켓 혹은 접속한 모든 소켓에 데이터를 전달하는 방식
Socket.IO 에서 손쉽게 데이터를 전달 할 수 있게 함
BroadcastUnicast
Unicast & Broadcast 구현 (Server)
Unicast 를 위해서는 보내려는 특정 소켓을 가리켜야 함
Broadcast 는 socket 의 broadcast 를 이용하여 전달 가능
// Broadcast
socket.on('broadcast', function (data) {
console.log('Broadcast : ' + data);
socket.broadcast.emit('msg', data);
});
// Unicast
socket.on('unicast', function(data){
console.log('Unicast : ' + data);
sock.emit('msg', data);
});
// Send All!
socket.on('sendall', function(data){
console.log('Sendall : ' + data);
io.emit('msg', data);
});
});
var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);
server.listen(80);
// 기본 접속 경로
app.get('/', function (req, res) {
res.sendFile(__dirname + '/sample2.html');
});
// 첫번째 접속
var sock = undefined;
// 외부 접속시 처리
io.on('connection', function (socket) {
// 접속한 모든 클라이언트에 전달
socket.emit('news', { hello: 'world1' });
if(!sock){
sock = socket;
}
Unicast & Broadcast 구현 (Client)
jQuery 와 Socket.IO 클라이언트를 이용하여 웹 페이지 구성
Unicast, Broadcast 를 확인할 수 있도록 버튼 구성
$('#unicast').click(function(){
sendMsg('unicast');
});
$('#broadcast').click(function(){
sendMsg('broadcast');
});
$('#sendall').click(function(){
sendMsg('sendall');
});
});
</script>
</head>
<body>
<input type='text' />
<p/>
<button id='unicast'>Unicast</button>
<button id='broadcast'>Broadcast</button>
<button id='sendall'>Sendall</button>
<div id='msgs'/>
</body>
</html>
<html>
<head>
<title>Hello Pi!</title>
<script src='https://code.jquery.com/jquery-
3.1.1.min.js'></script>
<script src='/socket.io/socket.io.js'></script>
<script>
$(function(){
var socket = io();
var id = 'Guest_' + Math.floor((Math.random() * 10) + 1);
socket.on('msg', function(data){
$('#msgs').append($('<p>').text('ID : ' + data.id + ' : ' +
data.msg));
});
var sendMsg = function(type){
var msg = $('input').val();
$('#msgs').append($('<p>').text('ME : ' + id + ' : ' +
msg));
socket.emit(type, { id : id, msg : msg});
$('input').val('');
}
Multicast 구현
THINKER TO MAKER
Namespace, Room
Multicast 구현
Multicast 는 접속한 클라이언트에서 특정 클라이언트 그룹만 데이터 전달
Socket.IO 에서는 Namespace 혹은 Room 으로 구현 가능
Multicast
특정 Namespace 를 지정하여 별도의 커넥션 관리
Namespace 를 이용한 구현 방법
방명에 Join, Leave 하는 식으로 데이터 처리
Room 을 이용한 구현 방법
P : 코드에 명시적으로 Multicast 대상이 구분됨
N : Multicast 대상 마다 코드가 늘어 남
P : 별다른 코드 추가 필요 없음. 간단한 구조
N : Multicast 대상이 명시적으로 표현 안됨
Multicast with Namespace (Server)
Unicast 를 위해서는 보내려는 특정 소켓을 가리켜야 함
Broadcast 는 socket 의 broadcast 를 이용하여 전달 가능
// Namespace2
app.get('/nsp2', function (req, res) {
res.sendFile(__dirname + '/nsp2.html');
});
var nsp2 = io.of('/namespace2');
nsp2.on('connection', function (socket) {
socket.emit('new', { namespace: 'nsp2' });
socket.on('broadcast', function (data) {
console.log('Nsp2 : ' + data);
socket.broadcast.emit('msg', data);
});
});
var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);
server.listen(80);
// Namespace1
app.get('/nsp1', function (req, res) {
res.sendFile(__dirname + '/nsp1.html');
});
var nsp1 = io.of('/namespace1');
nsp1.on('connection', function (socket) {
socket.emit('new', { namespace: 'nsp1' });
socket.on('broadcast', function (data) {
console.log('Nsp1 : ' + data);
socket.broadcast.emit('msg', data);
});
});
Multicast with Namespace (Client)
Namespace 를 이용하여 서버 구현 시, 클라이언트 접속 인자로 Namespace
이름을 입력하여 사용해야 함
<script src='/socket.io/socket.io.js'></script>
<script>
var socket = io('/namespace2');
var count = 0;
socket.on('new', function(data){
document.write(count++ + ' / ' +
JSON.stringify(data));
socket.emit('broadcast',{ name : 'namespace1' });
});
socket.on('msg', function(data){
document.write(count++ + ' : ' +
JSON.stringify(data));
});
</script>
<script src='/socket.io/socket.io.js'></script>
<script>
var socket = io('/namespace1');
var count = 0;
socket.on('new', function(data){
document.write(count++ + ' / ' +
JSON.stringify(data));
socket.emit('broadcast',{ name : 'namespace1' });
});
socket.on('msg', function(data){
document.write(count++ + ' : ' +
JSON.stringify(data));
});
</script>
Nsp2.htmlNsp1.html
Multicast with Room (Server)
Room 방식을 사용 시는 방 접속 시 join, 나올 땐 leave 함수를 사용
해당 Room 의 Socket 에 데이터를 보내기 위해서 to(방명)을 이용
socket.on('leave', function (data) {
console.log('Leave : ' + data.id + ' / '
+ data.room + ' Leaved!');
socket.leave(data.room);
io.to(data.room).emit('leave', data);
});
socket.on('msg', function (data) {
console.log('msg : ' + data.id + ' / ' +
data.room);
socket.broadcast.to(data.room).emit('msg',
data);
});
});
var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);
server.listen(80);
app.get('/', function (req, res) {
res.sendFile(__dirname + '/room.html');
});
io.on('connection', function (socket) {
console.log('connected');
socket.on('join', function (data) {
console.log('Join : ' + data.id + ' / '
+ data.room + ' Joined!');
socket.join(data.room);
io.to(data.room).emit('join', data);
});
Multicast with Room (Client)
클라이언트 측에서 Room 에 접속을 위해 별도로 할 작업은 없음
방명을 전달하여 서버 측에서 처리 해야 함
$('#room2').click(function(){
room = 'room2';
socket.emit('join', { id : id, room : 'room2'});
});
$('#send').click(function(){
var msg = $('input').val();
$('#msgs').append($('<p>').text('ME : ' + id + ' : ' + msg));
socket.emit('msg', { id : id, msg : msg, room : room});
$('input').val('');
});
});
</script>
</head>
<body>
<input type='text' />
<p/>
<button id='room1'>ROOM1 Join</button>
<button id='room2'>ROOM2 Join</button>
<button id='send'>Send</button>
<div id='msgs'/>
</body>
</html>
<html>
<head>
<title>Hello Pi!</title>
<script src='https://code.jquery.com/jquery-
3.1.1.min.js'></script>
<script src='/socket.io/socket.io.js'></script>
<script>
$(function(){
var socket = io();
var id = 'Guest_' + Math.floor((Math.random() * 10) + 1);
var room = 'room1';
socket.on('join', function(data){
$('#msgs').append($('<p>').text('ID : ' + data.id + ' : ' +
data.room + ' Joined!'));
});
socket.on('msg', function(data){
$('#msgs').append($('<p>').text('ID : ' + data.id + ' : ' +
data.msg));
});
$('#room1').click(function(){
room = 'room1';
socket.emit('join', { id : id, room : 'room1'});
});
W www.circul.us G group.circul.us
S social.circul.us C cafe.circul.us
CONTACT.US circulus@circul.us
THINKER TO MAKER
ANY
QUESTION?
x

More Related Content

PPTX
Startup JavaScript 7 - Node.JS 기초
PPTX
Startup JavaScript 8 - NPM, Express.JS
PDF
Node.js intro
PDF
Node.js 첫걸음
PPTX
Nodejs, PhantomJS, casperJs, YSlow, expressjs
PDF
막하는 스터디 첫 번째 만남 Node.js
PDF
막하는스터디 두번째만남 Express(20151025)
PDF
진짜기초 Node.js
Startup JavaScript 7 - Node.JS 기초
Startup JavaScript 8 - NPM, Express.JS
Node.js intro
Node.js 첫걸음
Nodejs, PhantomJS, casperJs, YSlow, expressjs
막하는 스터디 첫 번째 만남 Node.js
막하는스터디 두번째만남 Express(20151025)
진짜기초 Node.js

What's hot (20)

PDF
1.Startup JavaScript - 프로그래밍 기초
PDF
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
PPTX
Node.js
PDF
Node.js 심화과정
PPTX
아꿈사 발표 Node JS 프로그래밍 8장
PPTX
Leadweb Nodejs
PPTX
[하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발
PPT
헷갈리는 자바스크립트 정리
PPTX
Angular2 router&http
PPTX
공성대전 C# 사용기
PPTX
Angular2 가기전 Type script소개
PPTX
Node js[stg]onimusha 20140822
PDF
Node.js 기본과정
PPTX
ECMAScript 6의 새로운 것들!
PPTX
Node.js and react
PDF
Express 프레임워크
PDF
[1B4]안드로이드 동시성_프로그래밍
PDF
Html5 web workers
PDF
Play node conference
PPTX
windows via c++ Ch 5. Job
1.Startup JavaScript - 프로그래밍 기초
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
Node.js
Node.js 심화과정
아꿈사 발표 Node JS 프로그래밍 8장
Leadweb Nodejs
[하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발
헷갈리는 자바스크립트 정리
Angular2 router&http
공성대전 C# 사용기
Angular2 가기전 Type script소개
Node js[stg]onimusha 20140822
Node.js 기본과정
ECMAScript 6의 새로운 것들!
Node.js and react
Express 프레임워크
[1B4]안드로이드 동시성_프로그래밍
Html5 web workers
Play node conference
windows via c++ Ch 5. Job
Ad

Viewers also liked (20)

PPTX
Startup JavaScript 10 - OpenAPI & RSS 활용
PPTX
Startup JavaScript 6 - 함수, 스코프, 클로저
PDF
2.Startup JavaScript - 연산자
PPTX
Startup JavaScript 3 - 조건문, 반복문, 예외처리
PPTX
Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)
PPTX
Startup JavaScript 4 - 객체
PDF
123D Design - 모델링 기초
PPTX
Startup 123D Design - 9. 강아지 모델링
PDF
Personal Interconnect AUdio - piAu manual
PPTX
123D Design - 컵 만들기
PPTX
123D Design - 전구 디자인 하기
PPTX
Startup 123D Design - 8.벤치 만들기
PPTX
123D Design - 정리함 만들기
PPTX
Startup 123D Design - 7.물뿌리개 만들기
PPTX
123D Design - 화분 만들기
PPTX
Startup 123D Design - 10. 3D프린팅
PDF
nodejs websocket & SOCKET.IO
PDF
웹 개발 스터디 01 - PHP, MySQL 연동
PDF
웹 IDE 비교
PPTX
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
Startup JavaScript 10 - OpenAPI & RSS 활용
Startup JavaScript 6 - 함수, 스코프, 클로저
2.Startup JavaScript - 연산자
Startup JavaScript 3 - 조건문, 반복문, 예외처리
Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)
Startup JavaScript 4 - 객체
123D Design - 모델링 기초
Startup 123D Design - 9. 강아지 모델링
Personal Interconnect AUdio - piAu manual
123D Design - 컵 만들기
123D Design - 전구 디자인 하기
Startup 123D Design - 8.벤치 만들기
123D Design - 정리함 만들기
Startup 123D Design - 7.물뿌리개 만들기
123D Design - 화분 만들기
Startup 123D Design - 10. 3D프린팅
nodejs websocket & SOCKET.IO
웹 개발 스터디 01 - PHP, MySQL 연동
웹 IDE 비교
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
Ad

Similar to Startup JavaScript 9 - Socket.IO 실시간 통신 (20)

PDF
NODE.JS 글로벌 기업 적용 사례 그리고, real-time 어플리케이션 개발하기
PDF
Node-express 채팅 서버 개발기
PPTX
Rhea mmo node_for_share
PPTX
golang과 websocket을 활용한 서버프로그래밍 - 장애없는 서버 런칭 도전기
PDF
[NodeJS] - NET 모듈 소개
PDF
채팅 소스부터 Https 주소까지
PDF
Mean 스택을 사용한 IoT 개발
PDF
Python으로 채팅 구현하기
PDF
Web Socket API
PPTX
Node.js의 도입과 활용
PDF
WebSocket 기반 쌍방향 메시징
PPT
Rhea_MMO_SNG_Convergence_Server_Architecture
PDF
Python socket programming
PPTX
Node.js + Websocket 삽질기
PPTX
실시간통신
PPTX
파이썬+네트워크 20160210
PPTX
UWP 응용 프로그램 작성시 올바른 networking APIs 사용하기
PDF
(C#,네트워크강좌)간단한 TCP 클라이언트/서버 구현, 멀티쓰레드 기반 에코우 클라이언트/서버_C추천#/WPF/자마린실무교육학원
PDF
Nodejs_chapter3
PPT
sGen_4thExhibition_SmartEducation_PushPush
NODE.JS 글로벌 기업 적용 사례 그리고, real-time 어플리케이션 개발하기
Node-express 채팅 서버 개발기
Rhea mmo node_for_share
golang과 websocket을 활용한 서버프로그래밍 - 장애없는 서버 런칭 도전기
[NodeJS] - NET 모듈 소개
채팅 소스부터 Https 주소까지
Mean 스택을 사용한 IoT 개발
Python으로 채팅 구현하기
Web Socket API
Node.js의 도입과 활용
WebSocket 기반 쌍방향 메시징
Rhea_MMO_SNG_Convergence_Server_Architecture
Python socket programming
Node.js + Websocket 삽질기
실시간통신
파이썬+네트워크 20160210
UWP 응용 프로그램 작성시 올바른 networking APIs 사용하기
(C#,네트워크강좌)간단한 TCP 클라이언트/서버 구현, 멀티쓰레드 기반 에코우 클라이언트/서버_C추천#/WPF/자마린실무교육학원
Nodejs_chapter3
sGen_4thExhibition_SmartEducation_PushPush

More from Circulus (10)

PDF
라즈베리파이와자바스크립트로만드는 IoT
PDF
라즈베리파이입문 - 연세대 특강
PDF
123D Design - 스마트폰 케이스 모델링
PDF
JavaScript Everywhere from Mobile and Robot
PDF
piBo- Personal Intelligent roBOt
PDF
웨어러블 디바이스를 활용한 개인용 지능형 로봇
PDF
라즈베리파이 Circulus API 가이드
PDF
라즈베리파이로 IoT 시작하기 복습
PDF
라즈베리파이와 자바스크립트로 IoT 시작하기
PDF
라즈베라파이란 무엇인가?
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이입문 - 연세대 특강
123D Design - 스마트폰 케이스 모델링
JavaScript Everywhere from Mobile and Robot
piBo- Personal Intelligent roBOt
웨어러블 디바이스를 활용한 개인용 지능형 로봇
라즈베리파이 Circulus API 가이드
라즈베리파이로 IoT 시작하기 복습
라즈베리파이와 자바스크립트로 IoT 시작하기
라즈베라파이란 무엇인가?

Startup JavaScript 9 - Socket.IO 실시간 통신

  • 1. Startup JavaScript 9. Socket.IO 및 Node.JS 고급 THINKER TO MAKER x
  • 3. Socket.IO JavaScript 를 이용하여 실시간 어플리케이션을 구축할 수 있도록 하는 엔진. 양 방향의 이벤트 기반의 통신이 가능하고, 모든 플랫폼과 장치에서 동작 실시간으로 차트나 로그 데이터를 전달하여 표시 실 시간 분석 몇 줄의 코드만으로 채팅 어플리케이션 개발 가능 인스턴스 메신져 이미지, 오디오, 비디오 같은 이진 데이터 전달 가능 바이너리 스트리밍 상대방의 수정 내역을 보면서 동시 문서 수정 문서 협업
  • 4. Hello Socket.IO Express 와 Http 모듈과 연동하여 웹 통신 포트로 실시간 서버 구축 가능 웹 파일에서는 Socket.IO 클라이언트가 제공되어 손쉽게 구축 가능 $ npm install socket.io Socket.IO 설치 <script src='/socket.io/socket.io.js'></script > <script> var socket = io(); socket.on('news', function(data){ document.write(JSON.stringify(data)); socket.emit('feedback',{ hello : 'world2' }); }); </script> var app = require('express')(); var server = require('http').Server(app); var io = require('socket.io')(server); server.listen(80); // 기본 접속 경로 app.get('/', function (req, res) { res.sendFile(__dirname + '/sample1.html'); }); // 외부 접속시 처리 io.on('connection', function (socket) { // 접속한 모든 클라이언트에 전달 socket.emit('news', { hello: 'world1' }); // Client 로 부터 수신받는 event socket.on('feedback', function (data) { console.log(data); }); });
  • 5. 데이터 전달 방식 THINKER TO MAKER Unicast, Broadcast
  • 6. Unicast, Multicast 특정 소켓 혹은 접속한 모든 소켓에 데이터를 전달하는 방식 Socket.IO 에서 손쉽게 데이터를 전달 할 수 있게 함 BroadcastUnicast
  • 7. Unicast & Broadcast 구현 (Server) Unicast 를 위해서는 보내려는 특정 소켓을 가리켜야 함 Broadcast 는 socket 의 broadcast 를 이용하여 전달 가능 // Broadcast socket.on('broadcast', function (data) { console.log('Broadcast : ' + data); socket.broadcast.emit('msg', data); }); // Unicast socket.on('unicast', function(data){ console.log('Unicast : ' + data); sock.emit('msg', data); }); // Send All! socket.on('sendall', function(data){ console.log('Sendall : ' + data); io.emit('msg', data); }); }); var app = require('express')(); var server = require('http').Server(app); var io = require('socket.io')(server); server.listen(80); // 기본 접속 경로 app.get('/', function (req, res) { res.sendFile(__dirname + '/sample2.html'); }); // 첫번째 접속 var sock = undefined; // 외부 접속시 처리 io.on('connection', function (socket) { // 접속한 모든 클라이언트에 전달 socket.emit('news', { hello: 'world1' }); if(!sock){ sock = socket; }
  • 8. Unicast & Broadcast 구현 (Client) jQuery 와 Socket.IO 클라이언트를 이용하여 웹 페이지 구성 Unicast, Broadcast 를 확인할 수 있도록 버튼 구성 $('#unicast').click(function(){ sendMsg('unicast'); }); $('#broadcast').click(function(){ sendMsg('broadcast'); }); $('#sendall').click(function(){ sendMsg('sendall'); }); }); </script> </head> <body> <input type='text' /> <p/> <button id='unicast'>Unicast</button> <button id='broadcast'>Broadcast</button> <button id='sendall'>Sendall</button> <div id='msgs'/> </body> </html> <html> <head> <title>Hello Pi!</title> <script src='https://code.jquery.com/jquery- 3.1.1.min.js'></script> <script src='/socket.io/socket.io.js'></script> <script> $(function(){ var socket = io(); var id = 'Guest_' + Math.floor((Math.random() * 10) + 1); socket.on('msg', function(data){ $('#msgs').append($('<p>').text('ID : ' + data.id + ' : ' + data.msg)); }); var sendMsg = function(type){ var msg = $('input').val(); $('#msgs').append($('<p>').text('ME : ' + id + ' : ' + msg)); socket.emit(type, { id : id, msg : msg}); $('input').val(''); }
  • 9. Multicast 구현 THINKER TO MAKER Namespace, Room
  • 10. Multicast 구현 Multicast 는 접속한 클라이언트에서 특정 클라이언트 그룹만 데이터 전달 Socket.IO 에서는 Namespace 혹은 Room 으로 구현 가능 Multicast 특정 Namespace 를 지정하여 별도의 커넥션 관리 Namespace 를 이용한 구현 방법 방명에 Join, Leave 하는 식으로 데이터 처리 Room 을 이용한 구현 방법 P : 코드에 명시적으로 Multicast 대상이 구분됨 N : Multicast 대상 마다 코드가 늘어 남 P : 별다른 코드 추가 필요 없음. 간단한 구조 N : Multicast 대상이 명시적으로 표현 안됨
  • 11. Multicast with Namespace (Server) Unicast 를 위해서는 보내려는 특정 소켓을 가리켜야 함 Broadcast 는 socket 의 broadcast 를 이용하여 전달 가능 // Namespace2 app.get('/nsp2', function (req, res) { res.sendFile(__dirname + '/nsp2.html'); }); var nsp2 = io.of('/namespace2'); nsp2.on('connection', function (socket) { socket.emit('new', { namespace: 'nsp2' }); socket.on('broadcast', function (data) { console.log('Nsp2 : ' + data); socket.broadcast.emit('msg', data); }); }); var app = require('express')(); var server = require('http').Server(app); var io = require('socket.io')(server); server.listen(80); // Namespace1 app.get('/nsp1', function (req, res) { res.sendFile(__dirname + '/nsp1.html'); }); var nsp1 = io.of('/namespace1'); nsp1.on('connection', function (socket) { socket.emit('new', { namespace: 'nsp1' }); socket.on('broadcast', function (data) { console.log('Nsp1 : ' + data); socket.broadcast.emit('msg', data); }); });
  • 12. Multicast with Namespace (Client) Namespace 를 이용하여 서버 구현 시, 클라이언트 접속 인자로 Namespace 이름을 입력하여 사용해야 함 <script src='/socket.io/socket.io.js'></script> <script> var socket = io('/namespace2'); var count = 0; socket.on('new', function(data){ document.write(count++ + ' / ' + JSON.stringify(data)); socket.emit('broadcast',{ name : 'namespace1' }); }); socket.on('msg', function(data){ document.write(count++ + ' : ' + JSON.stringify(data)); }); </script> <script src='/socket.io/socket.io.js'></script> <script> var socket = io('/namespace1'); var count = 0; socket.on('new', function(data){ document.write(count++ + ' / ' + JSON.stringify(data)); socket.emit('broadcast',{ name : 'namespace1' }); }); socket.on('msg', function(data){ document.write(count++ + ' : ' + JSON.stringify(data)); }); </script> Nsp2.htmlNsp1.html
  • 13. Multicast with Room (Server) Room 방식을 사용 시는 방 접속 시 join, 나올 땐 leave 함수를 사용 해당 Room 의 Socket 에 데이터를 보내기 위해서 to(방명)을 이용 socket.on('leave', function (data) { console.log('Leave : ' + data.id + ' / ' + data.room + ' Leaved!'); socket.leave(data.room); io.to(data.room).emit('leave', data); }); socket.on('msg', function (data) { console.log('msg : ' + data.id + ' / ' + data.room); socket.broadcast.to(data.room).emit('msg', data); }); }); var app = require('express')(); var server = require('http').Server(app); var io = require('socket.io')(server); server.listen(80); app.get('/', function (req, res) { res.sendFile(__dirname + '/room.html'); }); io.on('connection', function (socket) { console.log('connected'); socket.on('join', function (data) { console.log('Join : ' + data.id + ' / ' + data.room + ' Joined!'); socket.join(data.room); io.to(data.room).emit('join', data); });
  • 14. Multicast with Room (Client) 클라이언트 측에서 Room 에 접속을 위해 별도로 할 작업은 없음 방명을 전달하여 서버 측에서 처리 해야 함 $('#room2').click(function(){ room = 'room2'; socket.emit('join', { id : id, room : 'room2'}); }); $('#send').click(function(){ var msg = $('input').val(); $('#msgs').append($('<p>').text('ME : ' + id + ' : ' + msg)); socket.emit('msg', { id : id, msg : msg, room : room}); $('input').val(''); }); }); </script> </head> <body> <input type='text' /> <p/> <button id='room1'>ROOM1 Join</button> <button id='room2'>ROOM2 Join</button> <button id='send'>Send</button> <div id='msgs'/> </body> </html> <html> <head> <title>Hello Pi!</title> <script src='https://code.jquery.com/jquery- 3.1.1.min.js'></script> <script src='/socket.io/socket.io.js'></script> <script> $(function(){ var socket = io(); var id = 'Guest_' + Math.floor((Math.random() * 10) + 1); var room = 'room1'; socket.on('join', function(data){ $('#msgs').append($('<p>').text('ID : ' + data.id + ' : ' + data.room + ' Joined!')); }); socket.on('msg', function(data){ $('#msgs').append($('<p>').text('ID : ' + data.id + ' : ' + data.msg)); }); $('#room1').click(function(){ room = 'room1'; socket.emit('join', { id : id, room : 'room1'}); });
  • 15. W www.circul.us G group.circul.us S social.circul.us C cafe.circul.us CONTACT.US circulus@circul.us THINKER TO MAKER ANY QUESTION? x

Editor's Notes

  • #2: Circulus 팀 박종건입니다. 위 사진은 작년 창조경제박람회때 포스터 운반하던 파이보의 모습입니다. 파이보와 함께 펼쳐가는 미래를 이야기 하겠습니다.