DEV/node js
Node js 웹소켓(WebSocket)으로 서버-클라이언트 메시지 주고받기 예시
석봉
2023. 3. 7. 11:00
Node js (server)
import http from "http";
import WebSocket from "ws";
import express from "express";
const app = express();
app.set("view engine", "pug");
app.set("views", __dirname + "/views");
app.use("/public", express.static(__dirname + "/public"));
app.get("/", (req, res) => {
res.render("home");
});
app.get("*", (req, res) => {
res.redirect("/");
});
const server = http.createServer(app);
const wss = new WebSocket.Server({ server });
wss.on("connection", (socket) => {
console.log("클라이언트가 연결되었음.");
// 이벤트
socket.on("close", () =>{
console.log("클라이언트가 나갔음 ㅠㅠ.");
});
socket.on("message", (message) => {
console.log("클라이언트로 부터의 메시지 : " + message);
});
socket.send('서버에서 보내보는 테스트 메시지');
});
server.listen(3000, () => {
console.log(`Listening on http://localhost`);
});
javascript (client)
const messageList = document.querySelector("ul");
const messageForm = document.querySelector("form");
const socket = new WebSocket(`ws://${window.location.host}`);
// 이벤트
socket.addEventListener("open", () => {
console.log("서버에 연결되었음.");
});
socket.addEventListener("message", (message) => {
console.log("서버로 부터의 메시지 : ", message);
});
socket.addEventListener("close", () => {
console.log("서버가 종료됨.")
});
setTimeout(() => {
socket.send("클라이언트에서 보내보는 테스트 메시지");
}, 1000);
messageForm.addEventListener("submit", (event) => {
event.preventDefault();
const input = messageForm.querySelector('input');
// input의 데이터를 submit 했을 때, 서버로 메시지 전송
socket.send(input.value);
});
Full Sample code
https://github.com/Seokhyeon-Park/node-clone-v2
결과