$ npm i --save @nestjs/websockets @nestjs/platform-socket.io
socket.io와 socket.io-client 또는 cnd에서 import해오는 거 서로 버전이 맞아야한다. 4.8.1 = 4.8.1
파일/코드 1. events.gateway.ts 생성
import {
ConnectedSocket,
MessageBody,
SubscribeMessage,
WebSocketGateway,
WebSocketServer,
} from '@nestjs/websockets';
import { Server, Socket } from 'socket.io';
// 5500 socket server
@WebSocketGateway(5500, {
cors: {
origin: '*', // CORS 설정
methods: ['GET', 'POST'],
allowedHeaders: ['Content-Type'],
},
})
export class EventsGateway {
// socket 서버 실행
@WebSocketServer()
server: Server;
// events namespace
@SubscribeMessage('events')
test(@MessageBody() data: any, @ConnectedSocket() client: Socket) {
console.log(data);
client.emit('events', 'hello client');
}
}
파일/코드 1. client/index.html
<html>
<head>
<script
src="https://cdn.socket.io/4.3.2/socket.io.min.js"
integrity="sha384-KAZ4DtjNhLChOB/hxXuKqhMLYvx3b5MlT55xPEiNmREKRzeEm+RVPlTnAn0ajQNs"
crossorigin="anonymous"
></script>
<script>
// socket 5500 포트 연결
const socket = io('http://localhost:5500');
// socket이 connect될 떄 실행
socket.on('connect', function () {
console.log('socket이 연결되었습니다.');
// events socket 서버에 데이터를 보냄
socket.emit('events', 'hello world server');
});
// events 서버로 부터 데이터를 받음
socket.on('events', function (data) {
console.log(data);
});
</script>
</head>
<body></body>
</html>