-
항해 99 5기 TIL_81항해 99 2022. 4. 1. 17:16
▶ Today I Learned
<실전 프로젝트>
[방에 사람이 있는지 없는지 일정 주기로 체크하기]
setInterval()라는 함수를 이용하면 가능하다
function checkLeftUser (id) { console.log("socket id socket id socket id",socket.id); console.log("users[roomId] users[roomId] users[roomId]", users[roomId]); console.log("users[roomId].includes(id) 다ㅏㅏㅏㅏㅏㅏ",users[roomId].includes(id)) } setInterval(checkLeftUser, 5000, socket.id)
socket.js 코드
socket.on("disconnecting", async () => { const data = { roomId, userId, time: time, categoryId: categoryId, date: date, }; console.log("socket disconnecting이 실행된다. 이다음은 await RoomController.delete.participant(data);이다ㅏㅏㅏ") console.log("socket time은 여기다ㅏㅏㅏㅏㅏㅏㅏㅏㅏ", time); console.log("socket data socket data socket data socket data ", data); await RoomController.delete.participant(data); if(users[roomId]) { users[roomId] = users[roomId].filter((id) => id !== socket.id); } const userInfo = socketToUser[socket.id]; socket.broadcast.to(roomId).emit("user left", { socketId: socket.id, userInfo, }); delete socketToNickname[socket.id]; delete socketToUser[socket.id]; }); // 정말로 방에서 나갔는지 확인 function checkLeftUser (id) { console.log("socket id socket id socket id",socket.id); console.log("users[roomId] users[roomId] users[roomId]", users[roomId]); console.log("users[roomId].includes(id) 다ㅏㅏㅏㅏㅏㅏ",users[roomId].includes(id)) } setInterval(checkLeftUser, 5000, socket.id)
console.log 결과
users[roomId] users[roomId] users[roomId] [ 'J1Xr6mKUIrxIa9YsAAAB', '6v9YKWn9Fsb56PZzAAAD' ] users[roomId].includes(id) 다ㅏㅏㅏㅏㅏㅏ true ... socket disconnecting이 실행된다. 이다음은 await RoomController.delete.participant(data);이다ㅏㅏㅏ socket time은 여기다ㅏㅏㅏㅏㅏㅏㅏㅏㅏ 1 ... users[roomId] users[roomId] users[roomId] [ '6v9YKWn9Fsb56PZzAAAD' ] users[roomId].includes(id) 다ㅏㅏㅏㅏㅏㅏ false
뒤로 가기로 방을 나갔을 땐 socket.id도 특정 방에서 삭제되지 않았다..
즉, socket disconnecting가 되기 전까지는 socket.id가 방에서 삭제되지 않는다는 것.
socket.io의 새로운 특성을 알았다.
참고자료:
https://offbyone.tistory.com/241
https://ko.javascript.info/settimeout-setinterval
https://yonghyunlee.gitlab.io/node/node-schedule/
▶ 느낀 점
우여곡절이 많았지만 결국 서비스 1차 배포를 완료하게 되었다.
내일 정리하여 여러 사람들에게 선보일 생각을 하니
막상 이러한 결과물을 만들어 내는데 일조했다는 것이 뿌듯했다.
개발자는 세상을 만들어가는 사람들이다.
나와 모두의 기술로 원하는 것을 구현해내는 그 매력에, 나는 개발자를 시작하게 된 것 같다.
스트레스도 받고 때론 힘들어도 문제를 해결하고자 고민하는 과정도 나름 재밌고 해결했을 떄의 보람은 정말 크다.
앞으로도 열심히 해서 세상을 만들어나가는 사람이 되자.
▶ 공부 시 참고 링크들
https://yohanpro.com/posts/js/node-path
NodeJS에서 Path 사용방법 - Yohan's Developer Diary
요즘 NodeJs를 사용하여 Veeva BoilerPlate 3.0 작업을 하는 중이다. Gulp를 사용하면서 느꼈던 점이지만, path를 정확히 맞춰 구현하는 건 생각보다 짜증나는 일이다. Node에서는 이런 path들을 맞추기 위해
yohanpro.com
https://jokergt.tistory.com/81
스크립트 언어란?
스크립트(Script) 언어란 소스 코드를 컴파일(Compile)하지 않고도 실행할 수 있는 프로그래밍 언어를 말한다. 예를 들어 C나 비주얼베이직, 자바같은 경우는 작성한 소스를 컴파일러를 통해 기계어
jokergt.tistory.com
onDelete: "CASCADE" 에 대한 결론
[Database/mysql] on delete cascade 에 대한 이해
Database를 공부하는 도중 on delete cascade 라는 문법을 만나게 되었다. 찾아보니 설명상으로는 어떤 tuple이 삭제될 때 foreign key로 연결된 tuple 또한 같이 삭제된다는 내용이었다. 의미를 보면 그런가
technote.kr
https://brunch.co.kr/@dan-kim/26
19화 19. 외래키 이해하기
데이터베이스에서 외래키 (Foreign Key)는 왜 필요할까? | 배경 지난 기본키 이해하기 글에서는 하나의 테이블에 중복된 데이터가 삽입되는 것을 방지하기 위한 기본키 제한조건에 대해서 배웠습
brunch.co.kr
카카오톡 로그인에 쓰이는 패스포트
https://www.npmjs.com/package/passport
passport
Simple, unobtrusive authentication for Node.js.. Latest version: 0.5.2, last published: 3 months ago. Start using passport in your project by running `npm i passport`. There are 4289 other projects in the npm registry using passport.
www.npmjs.com
카카오톡 로그인 기본적인 방법
https://devlog-wjdrbs96.tistory.com/232
[NodeJS] Passport로 카카오 로그인 구현하기
이번 글에서는 Passport 모듈을 이용하여 카카오 로그인을 구현하는 것에 대해서 정리하려 합니다. 먼저 카카오 개발자 페이지로 먼저 들어가보겠습니다. 그리고 [내 어플리케이션]을 클릭해보
devlog-wjdrbs96.tistory.com
'항해 99' 카테고리의 다른 글
항해 99 5기 TIL_83 (0) 2022.04.03 항해 99 5기 TIL_82 (0) 2022.04.02 항해 99 5기 TIL_80 (0) 2022.03.31 항해 99 5기 TIL_79 (0) 2022.03.30 항해 99 5기 TIL_78 (0) 2022.03.29