[WEB]

[Node.js] 웹 게임 개발 #3

ddgoori 2019. 11. 25. 16:38

#3 - Socket.iO

 

- 이벤트에서 가장 중요한 것은 connection임

- yarn add morgan 설치

- 크롬 콘솔 : io("/")
자기자신에게 연결됨

 

- 어떤 소켓이랑 연결됐는지 정보를 얻기 위해, socket과 연결될때마다 socket이라는 인자를 콘솔에 출력해보자

 

Hello World SocketiO는 채팅 어플리케이션임

- 2개의 이벤트가 만들어짐

- 하나는 유저가 보내고

- 다른 하나는 유저가 조인하는 것

 

#벡엔드에서 프론트엔드로 어떻게 이벤트를 보내는지

=> 누군가 SocketIO로 연결하면, 연결된 socket을 가져와서 메세지를 보냄

=> 이때 보느는 메세지를 hello로 함

 

#broadcast는 지금 접속한 클라이언트를 제외하고 모든 클라이언트에게 메세지를 보냄

 

RECAP

 

- 클라이언트는 이벤트를 듣고 있어야 함

- server.js : 백엔드

- index.js :  클라이언트

 

- 1) 클라이언트가 이벤트를 듣고 있지 않다면, 백엔드가 서버에 계속 보내도 클라이언트 반응안함

- 똑같은 케이스인데 다른 방식이 있음

- 2) 이번엔 서버가 이벤트를 듣고 있음, 예를들면 채팅할 때 무슨일이 일어나는가? 첫번째로 이벤트가 왔다 갔다 한다.

채팅을 할때 먼저  connection이라는 이벤트를 발생시키고, 그리고 connection이 일어나면 서버가 다른 소켓에게 이 소켓이 연결됐다고 다른 소켓들에게 알려줄 것임 => 그것이 브로드캐스트임!!

 

Chat with SocketIO

 

 

소켓 연결 -> 소켓이 보내는 이벤트를 들어야 하고, 소켓이 메세지를 보내면 그 메세지를 들어야함

 

-소켓이 메세지를 보내면

- 우리가 보낸 메세지와 함께 messageNotifi라는 이벤트를 broadcast함

 

 

총정리 (출처:댓글 정중식님)

 

1)socket은 메모리상에 저장된다.

2)쿠키와는 달리 서버와 클라이언트의 연결이 유지된다.

3)서버 이벤트 on으로 발생한것을 클라이언트쪽에서 이벤트 emit나 broadcast으로 받아줘야 이벤트가 발동된다.

4) 반대로 클라이언트에서 이벤트 on했을때 서버쪽에서 emit나 broadcast으로 받아줘야 한다.

 

**쿠키가 필요 없음!

왜냐면 서버에 연결되어 있어야 거기에 붙을 수 있기 때문이야

- connect 되어 있으면 서버가 연결되어 있기 때문

 

 

#연결을 계속 유지하고 싶으면 socket을 위한 데이터베이스를 사용해야하는데, 사용안하면 리프레쉬하면 닉네임 설정같은게 다 사라짐