NODE 웹소켓 통신하기
https://socket.io/
https://github.com/socketio/socket.io
개요
웹소켓을 쉽게 다룰 수 있는 노드 라이브러리 패키지
HTTP는 요청 <-> 응답 이라면 웹소켓은 그저 데이터를 담을 뿐이다.
사용법
// npm i socket.io
const server = app.listen(8080)
const io = require('socket.io')(server)
io.on('connection', (socket) => {
console.log('클라이언트가 연결 될 때 동작하는 이벤트')
})
// npm i socket.io-client
import openSocket from 'socket.io-client'
openSocket(API_URL)
### 컨트롤러가 소켓에 접근하는 법
객체 공유를 피하기 위해 우선 싱글턴 객체를 만들어야 한다.
```
```js
// socket.js
let io
module.exports = {
init: httpServer => {
io = require('socket.io')(httpServer)
return io
},
getIO: () => {
if (!io) {
throw new Error('소켓을 초기화 해주세요')
}
return io
}
}
// app.js
const io = require('socket.io').init(server)
// 컨트롤러
const controller = (req, res) => {
io.getIO().emit('my-name', {
name: 'yms',
})
}
모든 클라이언트는 my-name 이라는 이벤트가 있으면 위 데이터를 받을 수 있다.
// 클라이언트
const socket = openSocket(API_URL)
socket('my-name', data) => {
console.log(data)
})
클라이언트마다 다른 데이터를 받게 할 수도 있다.