반응형

serialization 4

Part 4-4-5. 패킷 직렬화 : Serialization #4

패킷 직렬화 지난 시간에는 ushort, int 자료형과 같이 크기가 정해져 있는 자료형과는 다른 string 자료형의 패킷 Write, Read에 대해서 알아보았다. 이는 크게 2가지의 방법으로 나뉘어져 있는데, 먼저 String Packet의 사이즈를 확인하고 그 다음 내부 데이터 값을 전송하는 방법이었다. 그렇다면 오늘은 String에서 더 나아가 List 자료구조를 보낼 때에는 어떻게 처리해야 하는지에 대해서 학습해본다. 💷 List Packet 그렇다면 List Packet은 어떻게 넘겨줄 수 있을까? 예시를 들어 설명하기 위해 기존에 작업하던 PlayerInfoReq 클래스에 새로운 List를 추가하자. public List skills = new List(); { } public struct..

Part 4-4-4. 패킷 직렬화 : Serialization #3

패킷 직렬화 지난 시간에는 유니코드와 인코딩의 기본적인 개념과 UTF-8, 16의 개념 및 차이점에 대해서 알아보았다. 이러한 지식을 바탕으로 오늘 배울 문자열 처리를 잘 학습해보자. 🧐 🚩 코드개선 Session Write 기존 코드는 아래 이미지와 같이 new Span을 사용하여 packetId, playerId 값을 세그먼트에 넘겨주었다. 이 부분을 보다 가독성 좋고 효율적으로 변경할 수 있다. 바로 매번 Span 변수를 사용하는 것이 아닌 Span 변수를 한번만 호출하고 선언하여 세그먼트의 값을 받아와 Span의 Offset 값만 변경하며 필요한 값들을 byte 타입으로 변경시켜 줄것이다. 변경된 코드를 보면 Span span을 선언하여 사용한다. 또한 기존 코드에서는 각 패킷의 사이즈를 하드코딩..

Part 4-4-2. 패킷 직렬화 : Serialization #2

패킷 직렬화 지난 시간에는 직렬화, 역직렬화의 개념과 이를 예시를 통해 이해하고 학습하였다. 물론 아직 개선이 필요한 부분은 많이 있지만.. 🤔 📌 직렬화 #2 Send 개선 지난 시간에 열심히 뜯어고친 OnConneccted 메서드 내부에서 buffer를 Send 하는 부분을 더욱 편리하게 사용하기 위해 이를 PlayerInfoReq 클래스 내부에 함수로 만들어 줄 것이다. 위 스크립트에서 빨간 줄로 그어진 부분을 개선할 것이다. 😋 먼저 사용하지 않는 PlayerInfoOk 클래스는 지워주고, Server 쪽에서 패킷을 읽는 부분(=역직렬화)도 매번 재사용 하기 위한 Read 메서드와, 패킷을 보내기 전 직렬화 하는 과정인 Write 메서드를 작성한다. public abstract class Pack..

Part 4-4-1. 패킷 직렬화 : Serialization #1

패킷 직렬화 지난 시간까지 Session, Connector, RecvBuffer, SendBuffer, PacketSession 등 다양한 클래스를 만들어 패킷 통신에 대해서 진행해보았다. 또한 통신하는 과정에서의 개선, 최적화 등 다양한 방식의 작업 또한 추가적으로 진행해보았다. 이번 세션에서는 패킷 직렬화를 통해 String, List 등 다양한 타입을 가지는 자료형들에 대해서 어떻게 전송이 필요하고, 어떤 방식으로 압축해야 하는지 등 보다 자세하게 알아보자. 📌 직렬화 마이크로소프트 공식 홈페이지에 따르면 C#(.NET)에서의 직렬화란 '지속시키거나 전송할 수 있는 형태로 개체 상태를 변환하는 프로세스'를 뜻한다. 그렇다면 왜? 직렬화를 사용해야 하고 이용해야할까? 이는 간단하다. String, ..

반응형