클라이언트 소켓의 연결 요청을 대기하고, 연결 요청이 오면 클라이언트 소켓을 생성하여 통신이 가능하게 한다.
1. socket()함수를 이용하여 소켓을 생성
2. bind() 함수로 ip와 port번호를 설정하게 된다
3. listen() 함수로 클라이언트의 접근 요청에 수신 대기열을 만들어 몇 개의 클라이언트를 대기 시킬지 결정
4. accept()함수를 사용하여 클라이언트와읭 연결을 기다림
실제로 데이터 송수신이 일어나는 것은 클라이언트 소켓이다.
1. socket()함수로 가장먼저 소켓을 연다
2. connect() 함수를 이용해 통신 할 서버의 설정된 ip와 port번호에 통신을 시도
3. 통신을 시도 시, 서버가 accept()함수를 이용하여 클라이언트의 socket descriptor를 반환
4. 이를 통해 클라이언트와 서버가 서로 read(), write()를 하여 통신(이 과정이 반복)
npm install --save socket.i0
//server
socket.on('event1', (data) => {
'event1'이 발생했을 때 서버에서의 반응
});
//client
socket.on('event1', (data) => {
'event1'이 발생했을 때 클라이언트에서의 반응
});
//특정 이벤트를 발생시키는 코드
socket.emit('event1', data);
//예시
var io = socketio.listen(server);
io.sockets.on('connection', (socket) => {
socket.on('이벤트1', (data) => { console.log('client가 보낸 데이터: ', data); socekt.emit('이벤트2', data);
// 이벤트1을 연결하고, 발생할때 이벤트2를 발생 & 클라이언트에 전달
});
// 위와 같이 이벤트 정의가 가능하다.
});
o.sockets.on('connection', (socket) => {
var roomName = null; socket.on('join', (data) => {
roomName = data; socket.join(data);
});
socket.on('message', (data) => { io.sockets.in(roomName).emit('message', 'test');
// 특정 방에 있는 클라이언트에게만 메시지 전송
});
});
//index.js
const express = require('express');
const app = express();
const http = require('http').createServer(app);
const port = 3001;
//서버에 소켓 연결
app.get('/', (req, res) => {
res.sendFile(__dirname + '/index.html');
});
io.on('connection', (socket) => {
//메세지를 입력하면 서버가 이를 chat message 이벤트로 받는다
socket.on('chat message', (msg) => {
console.log('message: ' + msg);
});
});
server.listen(port, () => {
console.log(`Listening on port ${port}`);
});
npm install socket.io-client
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io();
var messages = document.getElementById('messages');
var form = document.getElementById('form');
var input = document.getElementById('input');
form.addEventListener('submit', function(e) {
e.preventDefault();
if (input.value) {
socket.emit('chat message', input.value);
input.value = '';
}
});
socket.on('chat message', function(msg) {
var item = document.createElement('li');
item.textContent = msg;
messages.appendChild(item);
window.scrollTo(0, document.body.scrollHeight);
});
</script>