서버-클라이언트 양방향 연결으로 이루어지는 통신
npm install socket.io --save
터미널에서 위 코드로 socket.io 모듈을 설치한다.
const server = http.createServer(app);
const { Server } = require("socket.io");
const io = new Server(server);
서버 측에 socket.io 사용을 위한 모듈을 생성한다.
io.on('connection', (socket) => {
console.log('a user connected');
});
소켓을 연결하는 connection 이벤트 발생 시 socket 객체가 인자로 전달되고 socket 객체는 개별 클라이언트와의 통신하는 기본 객체이다. io 객체는 연결된 전체 클라이언트와 통신을 위한 객체이다.
connection 이벤트 발생 시 클라이언트가 전송한 메세지를 수신하거나 클라이언트에게 메세지를 송신한다.
const express = require('express');
const app = express();
const http = require('http');
const server = http.createServer(app);
const { Server } = require("socket.io");
const io = new Server(server);
app.get('/', (req, res) => {
res.sendFile(__dirname + '/index.html');
});
io.on('connection', (socket) => {
console.log('a user connected');
});
server.listen(3000, () => {
console.log('listening on *:3000');
});
socket.io를 사용하는 서버의 기본 코드이다
socket.emit('소켓명', '데이터') - 데이터 송신
socket.on('소켓명','데이터') - 데이터 수신
emit 메소드로 데이터를 송신하고 on 메소드로 데이터를 수신할 수 있다,
// 클라이언트가 socket으로 접속하면 실행
io.sockets.on("connection", (socket)=>{
console.log("소켓으로 접속 됨.");
socket.emit('news',"hello world");
socket.on('hi', (data)=>{
console.log("data => " + data);
});
// private messages
socket.on("private message",(from, msg )=>{
console.log('from => '+from + " msg => " + msg);
});
// 접속이 끊어졌을 때 실행
socket.on("disconnect", function(){
console.log("접속이 끊어짐");
});
});
on 메소드를 사용하여 클라이언트가 전송한 메세지를 수신할 수 있다.
1) 접속된 모든 소켓에 메세지 전달
io.sockets.emit("this",{will : "be received by "});
2) 메세지를 전송한 클라이언트에게만 메세지 전달
socket.emit("private message",{msg : "hello"});
3) 메세지를 전송한 클라이언트를 제외한 모든 클라이언트에게 메세지를 전송
socket.broadcast.emit("boroadcast", {msg : "hello"});
4) 특정 클라이언트에게만 메세지 전달
id는 socket 객체의 id 속성값이다.
io.to(id).emit("toid", {msg : "hello"});
<script src="https://cdn.socket.io/4.5.4/socket.io.min.js"></script>
클라이언트에서는 socket.io CDN을 사용하여 var socket = io();
socket.io 서버에 접속한다
// socket.io 서버에 접속
var socket = io();
// 서버로 메세지 받기
socket.on('this', function(data){
console.log(data);
console.log(data.will);
});
// 서버로 메세지 보내기
socket.emit('private message',"나","thanks");
클라이언트 측 코드이다. 클라이언트에서도 서버와 같이 socket.on() 메소드로 서버로부터 메세지를 받고 socket.emit() 메소드로 메세지를 보낸다.