전체 코드
var WebSocketServer = require("ws").Server;
var wss = new WebSocketServer({ port: 8001 });
CLIENTS = [];
updown = [];
// 연결이 수립되면 클라이언트에 메시지를 전송하고 클라이언트로부터의 메시지를 수신한다
wss.on("connection", function (ws) {
//CLIENTS.push(ws);
ws.on("message", function (message) {
console.log("received: %s", message);
var jsonData = JSON.parse(message);
console.log("json=" + jsonData[0].req);
if (jsonData[0].req == "con") {
CLIENTS.push(ws);
console.log(updown);
ws.send(JSON.stringify(updown));
// ws.send(JSON.stringify(tables));
// ///////test
// userInfo = {};
// userInfo["req"] = "currentUser";
// userID.push(userInfo);
// //ws.send(JSON.stringify(userID));
// ws.send(JSON.stringify(userID));
//sendAllExceptMe(message, ws);
} else if (jsonData[0].req == "up") {
console.log("send: " + message);
updownInfo = {};
updownInfo["req"] = jsonData[0].req;
updown.push(updownInfo);
sendAll(message);
} else if (jsonData[0].req == "down") {
console.log("send: " + message);
updownInfo = {};
updownInfo["req"] = jsonData[0].req;
updownInfo["downCnt"] = jsonData[0].downCnt;
updown.push(updownInfo);
sendAll(message);
} else if (jsonData[0].req == "passengerClose") {
console.log("send: " + message);
updownInfo = {};
updownInfo["req"] = jsonData[0].req;
updown.push(updownInfo);
sendAll(message);
updown = [];
}
});
ws.on("close", function (message) {
console.log("close");
for (var i = 0; i < CLIENTS.length; i++) {
if (CLIENTS[i] == ws) {
CLIENTS.splice(i, 1);
}
}
});
//ws.send("NEW USER JOINED");
ws.send(JSON.stringify("리선호등장"));
});
function sendAll(message) {
for (var i = 0; i < CLIENTS.length; i++) {
//console.log(CLIENTS[i].id);
CLIENTS[i].send("" + message);
}
}
function sendAllExceptMe(message, ws) {
for (var i = 0; i < CLIENTS.length; i++) {
if (CLIENTS[i] != ws) {
//console.log("클라이언트 " + CLIENTS[i].id); // userName
CLIENTS[i].send("" + message);
}
}
}
한줄 해석
var WebSocketServer = require("ws").Server
웹 소켓을 사용하기위해 require을 합니다. 그 값을 WebSocketServer 라는 변수에 담아둡니다.
var wss = new WebSocketServer({ port: 8001 });
WebSocketServer를 열어줍니다. 이때 포트번호는 마음대로 정하면 됩니다. 3000을 하든, 4000을 하든 상관없습니다.
(저는 8001 로 설정했습니다.)
CLIENTS = [];
updown = [];
CLIENTS 와 updown 배열 생성. 이 두가지 배열은 나중에 쓰임.
======🙂연결이 수립되면 클라이언트에 메시지를 전송하고 클라이언트로부터의 메시지를 수신한다🙂======
wss.on("connection", function (ws) {
ws.on("message", function (message) {
console.log("received: %s", message);
var jsonData = JSON.parse(message);
console.log("json=" + jsonData[0].req);
클라이언트가 서버에 접속했을때 처리하는 이벤트 메소드 입니다.
ㄴ클라이언트로 부터 메시지 수신 시 처리하는 이벤트 메소드.
ㄴ어떤 메시지를 수신하였는지 console로그로 찍은 코드.
ㄴ 클라이언트로 받은 메시지를 자바스크립트 함수인 json.parse() 함수를 이용하여 텍스트를 javascript 객체로 변환시킵니다. 그 값을 jsonData 변수에 넣어두는겁니다.
*이때 텍스트가 JSON 형식인지 확인해야 합니다. 그렇지 않으면 구문 오류가 발생합니다.
ㄴ jsonData의 첫번째 값 중 req 을 콘솔로그에 찍어봅니다.
여기서 req 는 제가 임의로 설정해둔 키 입니다. json 형식은 대표적은 키:값 으로 이루어져 있는데
저는 const text = '{"name":"John", "birth":"1986-12-14", "city":"New York", "req":"up"}';
const text = '{"name":"John", "birth":"1986-12-14", "city":"New York", "req":"up"}';
그렇다면 콘솔로그에 json = (req 키의 첫번째 값) 이 찍히겠죠? 😊
if (jsonData[0].req == "con") {
CLIENTS.push(ws);
console.log(updown);
ws.send(JSON.stringify(updown));
다음으로는 if 조건문인데요.
만약 jsonData의 첫번째 값의 req키값이 con일 경우 [ index.jsp 참고]
} else if (jsonData[0].req == "up") {
console.log("send: " + message);
updownInfo = {};
updownInfo["req"] = jsonData[0].req;
updown.push(updownInfo);
sendAll(message);
} else if (jsonData[0].req == "down") {
console.log("send: " + message);
updownInfo = {};
updownInfo["req"] = jsonData[0].req;
updownInfo["downCnt"] = jsonData[0].downCnt;
updown.push(updownInfo);
sendAll(message);
} else if (jsonData[0].req == "passengerClose") {
console.log("send: " + message);
updownInfo = {};
updownInfo["req"] = jsonData[0].req;
updown.push(updownInfo);
sendAll(message);
updown = [];
}
});
참고
1. https://kamang-it.tistory.com/entry/NodeJSWebSocketJavaScriptWebSocket-%EA%B8%B0%EC%B4%88-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0-%EB%8B%A8%EC%9D%BC-%ED%86%B5%EC%8B%A0-serverclient1
2.https://www.npmjs.com/package/ws#api-docs (웹소켓 참고)
3.https://www.w3schools.com/js/js_json_parse.asp (json parse() 참고)
'WebSocket' 카테고리의 다른 글
웹 소켓 (코드 분석 2 : python 편) (0) | 2022.11.13 |
---|---|
웹 소켓 (코드 분석) (1) | 2022.11.13 |
[파이썬] 웹 소켓 사용하기!😊 (0) | 2022.11.12 |
웹 소켓 (Web Socket)🤝🤝 (1) | 2022.11.12 |