나만의 작은 도서관
[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
오늘 한 일
더보기
- 타워 디펜스 온라인 팀 프로젝트
- 대결 신청 및 시작 기능 추가
- 몬스터 생성(요청 패킷)
- 적 몬스터 생성(통지 패킷)
'Today I Learn' 카테고리의 다른 글
[TIL] 240717 캠프 94일차: protoBuf에서의 상속 (0) | 2024.07.18 |
---|---|
[TIL] 240716 캠프 93일차: protoBuf oneof (0) | 2024.07.17 |
[TIL] 240712 캠프 89일차: 웹소켓에서 서버 주도 방식에서의 통신 (0) | 2024.07.12 |
[TIL] 240711 캠프 88일차: Lockstep, 게임서버 멀티플레이어 동기화 방식 종류 (0) | 2024.07.11 |
[TIL] 240710 캠프 87일차: 메모리, 상태 동기화 (0) | 2024.07.10 |