참치김밥은 최고의 한식이다

[개발 지식 + 유니티] Socket.IO 와 BestHTTP 란??? 본문

Unity

[개발 지식 + 유니티] Socket.IO 와 BestHTTP 란???

l__j__h 2024. 2. 22. 10:30

 

개인 노션에 정리해놓았던 글들을 블로그로 이사시키는 중이다.. 😂😂 파이팅!!


 

유니티 에셋 스토어에는 HTTP 소켓 통신을 편리하게 도와주는 Best HTTP 가 있다.

이 Best HTTP는 Socket.IO 통신을 제공하는데, Socket.IO가 뭔지 궁금해서 찾아보았다.

 

아 그 전에 소켓이 뭔지부터 짚고 넘어가야겠다!!

 

소켓이란?

- 프로토콜, ip address, port number로 정의됨
     ▷ 프로토콜 : 한 시스템이 다른 시스템과 통신을 원활하게 하기 위한 통신 규약
- 두 호스트를 연결하는 도구
- 두 호스트가 데이터를 양방향으로 주고받을 수 있도록 함
- 실시간으로 이루어짐

 

앗! 데이터를 주고받을 수 있다면, 일반적인 HTTP 통신과 뭐가 다르냐고???

HTTP 통신은 클라이언트가 요청을 보내는 경우에만 서버가 응답을 하는 단방향 통신이지만,

소켓 통신은 클라이언트와 서버 간 데이터 통신이 양방향으로 이루어진다.

 

더보기

+추가) 소켓 종류??

TCP

양방향으로 바이트 스트림 전송

- 흐름 제어 보장

     ▷ 송신된 순서에 따라 데이터를 수신하므로, 오버헤드 발생 가능

- 대량의 데이터 전송에 적합

 

UDP

비연결형 소켓 (따라서, TCP와 달리 연결 설정 안 해도 됨)

- 흐름 제어를 보장하지 않아, TCP보다 빠름

- 데이터 크기에 제한 있음

- 데이터가 손실돼도 오류가 발생하지 않아, 확실한 전달이 어려울 수 있음

- 이러한 이유로 실시간 멀티밈디어 송수신에 주로 사용됨 (전화)

 

그럼 이제 Socket.IO가 뭔지 간단히 살펴보자~~

 

Socket.IO란?

- Socket.IO는 Node.js 기반의 웹 소켓 라이브러리이며, 실시간 양방향 통신을 가능하게 해준다.
- 클라이언트와 서버 사이의 연결을 지속적으로 유지하며, 실시간으로 데이터를 주고받는 데에 유용하다.
   ( → 특히 게임 내 채팅이나 실시간 업데이트에 유용할 듯)
- 특히, Socket.IO에는 “방” 개념이 있어서, 특정 유저에게만 이벤트를 보낼 수도 있다!

 

마지막으로..

BestHTTP 간단 사용법 정리

 

Emit 을 통해 이벤트를 전송할 수 있다.

manager.Socket.Emit("chat message", "msg 1");

 


 

On<T>(”이벤트명”)로 이벤트를 구독하고, 받을 데이터형을 지정할 수 있다.

manager.Socket.On<int, int>("message", (arg1, arg2) => Debug.Log($"{arg1}, {arg2}"));

 

 


 

 

Emit을 통해 이벤트를 전송할 때에, 콜백이 필요한 경우가 있다.

이벤트 전송 후의 콜백은 ExpectAcknowledgement로 만들 수 있다.

class ReturnVal
{
    public int code;
    public string msg;
}

manager.Socket.ExpectAcknowledgement<ReturnVal>(OnAcknowledgements).Emit("chat message", "msg 1");

private void OnAcknowledgements(ReturnVal value)
{
    Debug.Log($"{value.code}, '{value.msg}'");
}

 

공식 문서 :

https://besthttp-documentation.readthedocs.io/en/dev/3.1Socket.IO3/

 

Socket.IO 3 - Best HTTP/2 Documentation

Socket.IO 3 Changes made in Socket.IO v3 (and Engine.IO v4) enables a less complex parser and message sending logic. To make the plugin's Socket.IO implementation a more user-friendly API with strongly typed callbacks, keeping backward compatibility became

besthttp-documentation.readthedocs.io

 

728x90