나만의 작은 도서관

[TIL] 240715 캠프 92일차: Socket.io: socket.id, socket.handshake 본문

Today I Learn

[TIL] 240715 캠프 92일차: Socket.io: socket.id, socket.handshake

pledge24 2024. 7. 15. 23:18

오늘 배운 내용                                     

socket.id

Socket.io에는 소켓의 정보를 담는 socket이라는 변수를 자주 사용한다. 클라이언트와 서버를 연결하고 연결된 소켓으로 통신을 하게된다. 문제는 여러 소켓들이 연결되어 있을 때 클라이언트가 상대의 데이터를 본인의 데이터와 동시에 받았을 때 어떤게 본인 데이터인지 구별할 필요가 있다. 

이 때 다양한 방식을 사용할 수 있지만, 검색을 해보면서 socket은 기본적으로 고유한 id값을 저장하고 있다는 사실을 알았다. 그래서 소켓의 정보를 클라이언트가 id로 넘겨받으면 배열에 들어있는 여러 유저(나 포함)의 데이터 중 본인의 데이터가 무엇인지 알 수 있다.

// 상대와 본인의 데이터가 배열로 들어있는 data
const mydata = mySocket.id === data[0].socket.id ? data[0] : data[1];

 

socket.handshake

socket은 객체형식으로 이루어져 있다. 이 때, 처음 서버와 연결할 경우 소켓에 데이터를 넣어서 넘겨줄 수 있는데, 이렇게 처음 연결 시 과정을 hanshake라고 하고 실제로 handshake를 할 때 socket에서 handshake라는 속성에 저장되게 된다.

// -------------- Client ---------------
serverSocket = io("http://127.0.0.1:3000", {
    auth: {
     token: localStorage.getItem("token"), // token : abcd
    },
  });
  
 
// ----------- Server ---------------
console.log(socket.hanshake.auth.token) // abcd

 

 

오늘 한 일                                       

더보기
  • 타워 디펜스 온라인 팀 프로젝트 
    • 대결 신청 및 시작 기능 추가
    • 몬스터 생성(요청 패킷)
    • 적 몬스터 생성(통지 패킷)