Today I learned
오늘은 프로젝트에 socket.io를 적용해서 주문이 새로 작성이 되면 클라이언트에게 알림을 보낼 수 있게 주문이 작성되면 클라이언트에게 간단한 확인을 할 수 있는 메시지를 보내는 작업을 진행했다
하지만 app.js를 socket이 벗어나는 방법이 문제였다 이 문제를 해결하기 위해서 socket을 모듈화해서 사용하기로 했다
let io;
module.exports = {
init: (httpServer) => {
io = require('socket.io')(httpServer);
return io;
},
getIO: () => {
if (!io) {
throw new Error('socket not initialized');
}
return io;
},
};
socket의 세팅과 socket을 사용할 부분에서 getIO를 이용해서 socket을 사용할 수 있다 이렇게 해서 파일의 위치에 상관없이 모듈을 불러온다면 사용할 수 있게 되었다 socket을 사용하는 부분에서 응답이 없는 문제가 발생했다
io.getIO().emit('createOrder', createOrderData);
const socket = io();
socket.on('createOrder', (data) => {
console.log(data);
})
이 문제를 해결하기 위해서 io.getIO().emit()을 실행하기 전에 connection이벤트가 발생하고 그 이벤트의 콜백함수로
사용해보기로 했다
io.getIO().on('connection', (socket) => {
io.getIO().emit('createOrder', createOrderData);
});
const socket = io();
socket.on('createOrder', (data) => {
console.log(data);
})
콜백함수 안에서 io.getIO().emit()을 사용해니까 주문이 작성되고 연결이 되었는지 확인해보기 위해 보낸 간단한 메시지가
정상적으로 콘솔에 찍히는걸 확인할 수 있었다
오늘은 socket.io를 프로젝트에 적용하고 제대로 동작하는지를 확인하는 작업을 하면서 문제를 해결하는 시간을 가졌다
socket을 어떻게 사용해야하는지 조금 감을 잡았다 내일은 프로젝트 리팩토링과 socket.io를 이용해서 주문이 등록되면
클라이언트에게 팝업 메시지를 띄워주고 새로고침을 해주는 작업을 진행할 계획이다.
'과거공부모음' 카테고리의 다른 글
나의 개발일지 20220110 TIL(Today I learned) - 이미지 업로드 (0) | 2023.01.13 |
---|---|
나의 개발일지 20220111 TIL(Today I learned) (0) | 2023.01.12 |
나의 개발일지 20220110 TIL(Today I learned) - socket.io (0) | 2023.01.10 |
나의 개발일지 20220109 TIL(Today I learned) - Websocket, socket.io (0) | 2023.01.09 |
나의 개발일지 WIL(Weekly I learned) 2023-01-09 (0) | 2023.01.09 |