1. 실시간 서비스 작성하기
1) socket.io : 호환되는 기술 자동 선택
2) http://socket.io
3) 설치
- npm install socket.io
2. socket.io 서버와 클라이언트
1) 서버
- HTTP 서버
- socket.io 서버
2) 클라이언트(웹 브라우저)
- HTTP 클라이언트
- socket.io 클라이언트
3. socket.io 서비스
1) 서비스 시작
- HTTP 서버 준비
- socket.io 서버 준비
- socket.io 클라이언트 요청 - HTML로 응답
- socket.io 클라이언트 초기화 및 서버 접속
4. 실시간 서비스를 위한 서버 준비
1) 두 서버 준비
- 웹 서버 ➡ http, express
- socket.io 서버
2) socket.io 서버 생성
- var server = require('socket.io');
- var io = new Server(httpServer);
3) 축약 형태
- var io = require('socket.io')(server);
4) 연결 이벤트
- connection
5. HTTP 서버와 socket.io 서버 준비
var http = require('http');
var server = http.createServer(function(req, res) {
res.end('socekt.io Sample');
});
server.listen(3000);
1) socket.io 서버
- var io = require('socket.io')(server);
6. Express와 socket.io 서버 준비
var express = require('express');
var http = require('http');
var app = express();
var server = http.Sever(app);
server.listen(8080);
1) socket.io 서버
- var io = require('socket.io')(server);
7. socket.io 클라이언트
1) socket.io 클라이언트 준비
- HTTP 서버에게 socket.io 초기화 HTML 요청
- HTML 로딩 - 스크립트(script) 로딩
- socket.io 클라이언트 초기화
- socket.io 서버 연결
2) 서버의 socket.io 클라이언트 html 응답
app.get('/', function(req, res) {
res. sendFile(__dirname + '/client.html');
});
3) socket.io 클라이언트
3-1) 스크립트 로딩
- 서버 모듈 로딩 or CDN
<script src="/socket.io/socket.io.js"></script>
<script src="https://cdn.socket.io/socket.io-1.37.js"></script>
3-2) 클라이언트 소켓 클래스
- IO(url: String, opts: Object): Socket
3-3) 소켓 생성, 연결
- var socket = io();
3-4) socket.io 클라이언트 이벤트
- connect : 서버와 연결
- error : 연결 에러
- disconnect : 연결 끊김
- reconnect, reconnection, reconnect_error,... : 재접속
🔽
" 서버와 연결이 끊어지면 자동으로 재접속 시도 "
8. 서버와 클라이언트 연결
9. 클라이언트의 콘솔 보기
1. 데이터 교환
1) 메시지 주고 받기 - 이벤트 기반
▪ 메시지 이벤트 정의
2) 메시지 전송
▪ 이벤트 발생 : socket.emit()
▪ socket.emit('EVENT', data);
3) 메시지 수진
▪ 이벤트 리스너 등록 : socket.on()
▪ socket.on('EVENT', function(data) {} );
2. 이벤트를 이용해서 데이터 주고받기
3. 이벤트로 메시지 주고 받기
▪ 서버에 이벤트 등록 - 클라이언트에서 이벤트 발생
▪ 클라이언트 이벤트 등록 - 서버에서 이벤트 발생
1) 서버에서의 이벤트 발생
▪ 소켓 하나에 이벤트 발생 : socket.emit('Direct Event', [데이터]);
▪ 연결된 모든 소켓에 이벤트 발생 : socket.io.emit('Broadcast Event', [데이터]); // io.emit으로도 가능
1. 네임스페이스와 룸
1) socket.io 기본 연결
▪ 소켓과 1:1
▪ 모든 소켓과 통신
2) 1:N 통신
▪ 개별 소켓과 1:1 통신 N번 반복
▪ 네임스페이스 필요
▪ 룸 필요
2. 네임스페이스로 socket.io 연결 구분
▪ 같은 네임 스페이스에서만 메시지 주고받음
▪ 기본 네임스페이스 : /
▪ 커스텀 네임스페이스 : /NAME-SPACE
3. 기본 네임스페이스로 연결
▪ 서버 : var io = require('socket.io')(server);
▪ 클라이언트 : var socket = io();
4. 커스텀 네임 스페이스
▪ var nsp = io.of('/Custom-Namespace');
▪ 클라이언트 : var nsp = io('/Custom-Namespace');
5. 네임스페이스를 이용한 커넥션과 통신
6. 룸(room)
▪ 네임스페이스 안의 작은 그룹(채널)
▪ 같은 룸에서만 데이터 교환
▪ 룸에 입장(join), 여러 룸에 입장 가능
▪ 룸에서 떠나기(leave)
1) 룸 접속 / 떠나기 - 서버 쪽에서!
▪ Socket#Join(name:String [, fn:function]):Socket : 특정 룸에 입장
▪ Socket#Leave(name:String [, fn:function]):Socket : 룸에서 떠나기
2) 룸 이벤트
▪ Socket#to(room:String):Socket : 특정 룸에서만 이벤트 발생
3) 룸 입장 / 떠나기
▪ 서버에서 동작
7. 룸을 이용한 통신