나만의 작은 도서관
[TIL] 240617 캠프 64일차: Socket.io의 on과 emit 본문
오늘 배운 내용
Socket.io의 on과 emit
on메소드는 이벤트가 발생했을 때 실행할 로직을 이름과 함께 정의하는 것이고, emit은 해당 이름을 가진 이벤트의 로직을 실행한다. 예시는 다음과 같다. 출처: https://socket.io/docs/v3/emitting-events/
// server-side
// 서버(io)에 연결 이벤트가 생기면, 연결을 시도한 소켓에게 hello라는 이름의 이벤트와 로직을 추가한다.
io.on("connection", (socket) => {
socket.on("hello", (arg) => {
console.log(arg); // world
});
});
// client-side
// 소켓의 이벤트 중 hello라는 이벤트를 world라는 파라미터를 넣어 실행한다.
socket.emit("hello", "world");
핸들러가 여러개 있을 때 mapping table을 사용하는 이유
여러 개의 핸들러가 존재하는 경우, 테이블을 사용하지 않고 1:1 대응하는 코드를 짜게되면 핸들러가 많아질수록 어떤 핸들러가 있는지 찾아보기도 힘들고 계속해서 해당 핸들러에 대한 코드를 추가로 짜야한다. 이런 가독성적인 면과 불편함을 해소하기 위해 mapping table을 만들어 모든 핸들러에 대한 리스트를 관리하는 것이다. 여기에 추가로, helper를 사용해서 하나의 mapping table에서 나온 결과물을 handleEvent와 같은, 헬퍼 함수의 매걔변수로 넣어 사용할 수 있다는 점에서 복잡성이 낮아지고 일관성이 높아진다.
io.on('connection', {})은 emit이 따로 없어도 이벤트가 발생하는이유
보통 on으로 지정한 이벤트는 emit이 없으면 절대로 해당 콜백함수가 호출되지 않는다. 하지만, 예외적으로 io.on의 connection이벤트는 소켓이 연결을 시도했을 때 자동으로 emit을 사용하는 것과 같은 실행을 한다. 이렇기 때문에 emit이 없어도 io.on의 connection이벤트에 정의해 둔 콜백함수가 실행이 되는 것이다
오늘 한 일
더보기
- 클라이언트 영역에서 일부 요소의 수치 조정
- 서버에 관리해야하는 일부 게임 데이터 model 제작 ex) 클라이언트 monster데이터 -> 서버에 위치한 monster.model.js에서 관리
'Today I Learn' 카테고리의 다른 글
[TIL] 240619 캠프 66일차: docker 컨테이너 접속 명령어, JS reduce() (0) | 2024.06.19 |
---|---|
[TIL] 240618 캠프 65일차: JS 배열 사용법(특정 속성의 특정 값을 통해 객체 반환, forEach(elem, index, array)) (0) | 2024.06.18 |
[TIL] 240611~240613 58~60일차: 예비군으로 인한 불참 (0) | 2024.06.14 |
[TIL] 240614 캠프 61일차: docker를 사용하는 이유, redis가 좋은 이유 (0) | 2024.06.14 |
[TIL] 240610 캠프 57일차: 인터페이스, SOLID, 아키텍처 패턴, jest 사용 오류해결 (0) | 2024.06.10 |