반응형
socket io를 사용해서 통신하는 방법입니다.
socket.io란 ?
NodeJS기반 '실시간' 웹 애플리케이션 지원 라이브러리입니다.
Client --> Server
io.on('connection', (socket) => {})
// connection : socket.io의 기본 이벤트이며, 사용자가 웹에 접속하면 자동으로 발생하는 이벤트입니다.
socket.on('message', (data) => {
console.log('Data', data);
});
// 해당 클라이언트에서 메시지를 보내줍니다.
Server --> Client
io.emit('message', data);
// 서버가 현재 접속해있는 모든 클라이언트에게 이벤트를 전달해줍니다.
socket.emit('message', data);
// 서버에서 event를 발생시키는 함수입니다. 서버에서 이벤트를 발생시키면 클라이언트 페이지에 해당 이벤트에서 처리합니다. 해당 소켓을 통해 클라이언트에게 메시지를 전송합니다.
npm
// BackEnd
$ npm install socket.io
// FrontEnd
$ npm install socket.io-client
socket.js
import { io } from "socket.io-client";
const serverUrl = "http://localhost:4000/";
const socket = io(serverUrl);
export { socket };
App.js [ Front End ]
import { useEffect, useState } from "react";
import { socket } from "../../js/socket";
const App = () => {
const [state, setState] = useState({name: '', message: ''});
const [chat, setChat] = useState([]);
useEffect(() => {
socket.on('message', ({name, message}) => {
setChat([...chat, {name, message}]);
})
}, [chat]);
const textChange = (e) => {
setState({...state, [e.target.name]: e.target.value});
};
const onSubmit = () => {
const {name, message} = state;
socket.emit('message', {name, message});
setState({message: '', name})
};
return (
<div>
<input type="text" name="name" value={state.name} onChange={textChange} placeholder="이름입력" />
<textarea value={state.message} name="message" onChange={textChange} />
<button onClick={onSubmit}>내용입력</button>
{
chat.map((item, index) => (
<div key={index}>
<div>{item.name}</div>
<div>{item.message}</div>
</div>
))
}
</div>
);
};
export default App;
App.js [ Back End ]
const express = require('express');
const app = express();
const http = require('http');
const socket = require('socket.io');
const server = http.createServer(app);
const io = socket(server, {
cors: {
origin: "*",
methods: ["GET", "POST"]
}
});
const PORT = 4000;
server.listen(PORT, () => {
const message = `
[ Project ]
Running PORT: localhost:${PORT}
`;
console.log(message);
});
io.on('connection', (socket) => {
socket.on('message', ({name, message}) => {
io.emit('message', ({name, message}));
});
console.log('연결 완료');
});
반응형
'React > React' 카테고리의 다른 글
[ React ] IntrinsicAttributes & AuthProps Error (0) | 2022.12.21 |
---|---|
[ React ] redux 데이터 스토리지에 저장하기 ( redux-persist ) (0) | 2022.11.29 |
[ React ] JSX에서 if문 사용하기 (0) | 2022.11.18 |
[ React ] Warning: Cannot update a component ... (0) | 2022.11.11 |
[ React ] 검색기능 만들기 (0) | 2022.11.11 |