실시간 채팅 구현
Express를 이용한 웹 소켓 서버 생성 및 실행
const express = require("express");
const app = express();
const server = require("http").createServer(app);
const portNo = 3001;
server.listen(portNo, () => {
console.log("서버 스타트", "http://localhost:" + portNo);
});
app.use("/public", express.static("./public"));
app.get("/", (req, res) => {
res.redirect(302, "/public");
});
const socketio = require("socket.io");
const io = socketio.listen(server);
io.on("connection", socket => {
console.log("사용자 접속", socket.client.id);
socket.on("send message", msg => {
console.log("receive message", msg);
io.emit("update message", msg);
});
});
채팅 컴포넌트에서 웹 소켓 서버 연결 및 메세지 전송
import socketio from "socket.io-client";
const socket = socketio.connect("http://localhost:3001");
const Chat = ({ status, chatStatus }) => {
const [msg, setMsg] = useState("");
const [res, setRes] = useState([]);
useEffect(() => {
socket.on("update message", obj => {
res.unshift(obj);
setRes(res);
});
}, [res]);
const msgSend = e => {
if (e.charCode === 13) {
e.preventDefault();
if (!e.target.value) {
} else {
const day = new Date();
const hour = day.getHours();
const minutes = day.getMinutes();
e.preventDefault();
socket.emit("send message", {
message: msg,
hour: hour,
minutes: minutes
});
setMsg("");
}
}
};
const onChange = e => {
setMsg(e.target.value);
};
const mapOfRes = item => {
return item.map((ele, idx) => (
<Other key={idx} status={status}>
<Left status={status}>
<Username>sadsadsadasd</Username>
<Comment>{ele.message}</Comment>
</Left>
<Right status={status}>{`${ele.hour}:${ele.minutes}`}</Right>
</Other>
));
};