[Unity] BestHttp2

강상훈·2023년 2월 23일
0

Unity

목록 보기
6/11

BestHttp2


https://r22002-pms-be.s3.ap-northeast-2.amazonaws.com/2023-01-05T09%3A48%3A51.605Z.image.png

  • WebGL에서 소켓에 직접 접근 불가(WebSocket-sharp 같은 패키지 사용)
  • Js 플러그인을 만들어서 여러 단계를 거쳐서 통신해야함.

Socket

Usage

https://r22002-pms-be.s3.ap-northeast-2.amazonaws.com/2023-01-05T09%3A52%3A41.231Z.code-snapshot.png

  • Uri는 System 네임스페이스
  • SocketManager는 SocketIO3 네임스페이스에 포함되어 있다.

Receive Event

server -> data.toString()

manager.Socket.On<string>("message", (data) => {
	PlayerData playerData = JsonUtility.FromJson<PlayerData>(data);
	Debug.Log(playerData.position);
}

server -> { position : (0,0,0)}

manager.Socket.On<PlayerData>("message", (data) => {
	Debug.Log(data.position);
}
  • message에 이벤트명, data에서 들어오는 데이터를 받는다.
  • 서버에서 toString()으로 보내면 JsonUtility를 이용해서 파싱
  • 서버에서 딕셔너리의 형태로 오면 동일한 Key값을 가진 클래스로 데이터를 받을 수 있다.
  • PlayerData의 프로퍼티 변수명과 서버에서 보내는 데이터의 Key값이 일치하지 않으면 Null 뜸

Send Event

manager.Socket.Emit("message", "Hello!");

  • message에 이벤트명, 두번째 파라미터에 보낼 데이터 작성.
RoomInfo roomInfo = new RoomInfo(_RoomID(), Network.manager.Socket.Id, 0, "");
manager.Socket.Emit("WSS_SEND_MAKE_ROOM", JsonUtility.ToJson(roomInfo));
  • 클래스를 직렬화해 데이터 전송

ex) 서버에서 message 들어온 값을 그대로 반환하는 이벤트가 있다고 하면,
Emit("message") -> On("message") -> Log("Hello")

Warnings

  • JsonUtility에서 ToJson으로 만드는 클래스는 프로퍼티(get, set) 사용불가
  • 클래스 내 변수는 Object형식(Transform)이 아닌 Vector3, Quatanion 같이 분리해서 보내야 한다. (파싱할 때 null 발생)
  • (서버)유저 목록 보낼 때 {ID : ID, ID2 : ID2}로 보내면 받을 수가 없다(받는 데이터에서 변수명과 키 값을 일치시켜줘야 하기때문), Array같은 형식으로 보내야 한다. https://r22002-pms-be.s3.ap-northeast-2.amazonaws.com/2023-01-09T05%3A23%3A00.507Z.image.png

REST

Basic Usage

https://r22002-pms-be.s3.ap-northeast-2.amazonaws.com/2023-01-19T04%3A56%3A29.235Z.code-snapshot.png

  • Requset 인스턴스를 생성하고 Send 함수로 보낸다.
  • 2번째 파라미터에 HTTPMethods를 추가해 GET, POST, UPDATE, DELETE 요청을 보낼 수 있다.

Request with data(json)

https://r22002-pms-be.s3.ap-northeast-2.amazonaws.com/2023-01-19T04%3A59%3A08.697Z.code-snapshot.png

  • 소켓 통신과 동일하게 클래스를 JSON화, 전송
  • 비동기 처리를 위해 async, await 사용

Usage Example

https://r22002-pms-be.s3.ap-northeast-2.amazonaws.com/2023-01-19T05%3A01%3A11.985Z.code-snapshot.png

  • CompREST의 Send함수 : Send(string uri, string method, T? data)
  • 서버에는 {data : 123}으로 전달된다.

Server-side code

https://r22002-pms-be.s3.ap-northeast-2.amazonaws.com/2023-01-19T05%3A03%3A44.154Z.code-snapshot.png

[References]

https://benedicht.github.io/BestHTTP-Documentation/pages/best_http2/protocols/socketio/socketio.html

profile
https://totohoon01.tistory.com/

0개의 댓글