어쩌다보니, 채팅 프로그램 비슷하게 만들일이 생겨서 웹소켓을 공부하게 되어, 간단하게 React에서 연결하는 걸 보여주려고 한다.
react에서 사용하는 라이브러리중 socket.io-client 를 사용하였다.
npm install socket.io-client
or
yarn add socket.io-client
방식으로 설치할 수 있다.
우선 웹소켓을 연결할 준비가 되어있다는 전제로
import { useEffect } from 'react';
import io from 'socket.io-client';
export default function WebSocket() {
const socket = io('ws://localhost:8000');
useEffect(() => {
socket.on('event', (data) => {
console.log('백엔드에서 송신된 데이터:', data);
});
return () => {
socket.disconnect();
};
}, []);
return null;
}
연결할 백엔드 주소를 입력하고, socket.on 을 사용하여 전송할 이벤트 명을 입력하면 그 이벤트로 연결이 되고, 백엔드에서도 이벤트 명을 통하여, 다시 데이터를 전송 시킬수 있다.
socket.emit('event',test);
와 같은 방식으로 연결된 이벤트에 데이터를 전송할 수 있다.
아래는 전체적인 코드이다.
import { useEffect } from 'react';
import io from 'socket.io-client';
export default function WebSocket() {
const socket = io('ws://localhost:8000');
useEffect(() => {
socket.on('event', (data) => {
console.log('백엔드에서 송신된 데이터:', data);
});
return () => {
socket.disconnect();
};
}, []);
const testData = { message: 'Hello from client!' };
const handleClick = () => {
if (socket) {
socket.emit('event', testData);
}
};
return (
<>
<div>
<button onClick(handleClick)> send Data </button>
</div>
</>
);
}
웹소켓을 연결 후 버튼을 클릭할 경우 message를 연결된 웹소켓의 이벤트에 전송한다.
이러한 방식을 로컬에서 사용할 경우에서는 잘 되지만, 실제 서버에 올릴 경우에는 연결된 nginx과 같은 서버 소프트웨어 설정을 따로 해주어야된다.