신입 개발자가 작성한 연구일지입니다. 이때 오해하고 있던 잘못된 정보가 포함되어 있습니다.
이번에는 수신된 json 을 역직렬화 시켜 다시 클래스로 재조립했습니다.
가장 쉬운 방법인 JsonConvert 를 사용한 코드입니다.
static async Task<(bool IsSuccess, ProtocolResponse Response)> ReceiveAsync(Remote remote)
{
int length = await remote.socket.ReceiveAsync(remote.receiveBuffer, SocketFlags.None);
string rcv = System.Text.Encoding.UTF8.GetString(remote.receiveBuffer, 0, length);
if (rcv == "" || rcv.Length == 0)
return (false, null);
if (remote.socket.Connected == false)
return (false, null);
var obj = JsonConvert.DeserializeObject<JObject>(rcv);
if (obj.TryGetValue("ProtocolId", out var value))
{
(bool IsSuccess, ProtocolResponse Response) Result = (false, null);
switch (value?.Value<int>())
{
case (int)ProtocolId.Mesasge:
Result = await ProcessAsync(JsonConvert.DeserializeObject<MessageRequest>(rcv));
break;
// 여기에 각종 타입을 추가
}
if(Result.Response != null) return (Result.IsSuccess, (ProtocolResponse)Result.Response);
}
return (false, null);
}
위 방법을 통해서는 json 을 우선 JObject 타입으로 변환한 후, protocol id 를 조회하여 클래스로 변경합니다.
1) 미리 protocolId 를 프로토콜에 추가해 두었고, 2) 모든 Request 프로토콜이 ProtocolRequest 프로토콜을 상속받고 있기 때문에, 이렇게 하면 간단하게 Json 을 다시 클래스로 구조화할 수 있습니다.
사실 프로토콜을 만드는 다른 방법도 있었습니다.
1. json 이 아닌, byte 배열로 바꾸고 암호화까지 해 보는 방식도 있었고
2. 역직렬화를 할 때 위와 같은 방식이 아닌, c# reflection 을 사용해 보는 방식도 있었습니다.
하지만 지금의 목표는 높은 보안성이 아닌, 3만명을 수용해보는 것에 있습니다.
이와 같은 작업은 프로그램을 더 무겁게 만들고, 가독성을 저해하기 때문에, 다음 기회에 해 보도록 하겠습니다!
다음 일지에서는 본격적으로 100명, 1000명, 10000명을 연결해 보며 서버가 여러 클라이언트의 '접속'을 수용할 수 있는지 테스트해보도록 하겠습니다.
여러 클라이언트의 동시다발적인 데이터 전송은 더 나중에 해 보도록 하고, 다음번에는 연결만 해 보도록 하겠습니다!
아마 연결만 해봐도 오래 걸릴 것 같습니다.
오늘의 일지 끝!
목표
30000명이 동시에 접속할 수 있는 TCP 서버 만들기
30000명의 클라이언트는 전송 - 수신 - 전송 - 수신 을 반복한다.
30000명의 클라이언트를 켜 놓고, 다음날 서버가 에러 없이 살아 있는 것을 목표한다.
목표를 성취한 후에는 평균 응답 시간을 줄여보도록 하겠다.
프로젝트 Git Hub Repository 링크
https://github.com/MatorMirne/SocketCommunicate-TCP
이전 포스트
- 1일차 : 2023.06.26 - [일지/C#] - [프로젝트 예수 - 1일차] 대규모 동시접속 TCP 서버
- 2일차 : 2023.06.27 - [일지/C#] - [프로젝트 예수 - 2일차] 대규모 동시접속 TCP 서버 제작기
- 3일차 : 2023.06.28 - [일지/C#] - [프로젝트 김필여 - 3일차] 대규모 동시접속 TCP C# 서버 제작기
- 4일차 : 2023.06.29 - [일지/미니프로젝트] - [프로젝트 김필여 - 4일차] 대규모 동시접속 TCP C# 서버 제작기
- 5일차 : 2023.07.05 - [일지/미니프로젝트] - [프로젝트 김필여 - 5일차] 대규모 동시접속 TCP C# 서버 제작기
- 6일차 : 2023.07.24 - [일지/미니프로젝트] - [프로젝트 김필여 - 6일차] 대규모 동시접속 TCP C# 서버 제작기
- 7일차 : 2023.07.25 - [일지/미니프로젝트] - [프로젝트 김필여 - 7일차] 대규모 동시접속 TCP C# 서버 제작기
- 8일차 : 2023.10.11 - [일지/미니프로젝트] - [프로젝트 김필여 - 8일차] 대규모 동시접속 TCP C# 서버 제작기
- 9일차 : 2023.10.11 - [일지/미니프로젝트] - [프로젝트 김필여 - 9일차] 대규모 동시접속 TCP C# 서버 제작기
'Side Project > 안양시장 프로젝트 - TCP 서버개발' 카테고리의 다른 글
[프로젝트 김필여 - 13일차] 대규모 동시접속 TCP C# 서버 제작기 (2) | 2023.11.06 |
---|---|
[프로젝트 김필여 - 12일차] 대규모 동시접속 TCP C# 서버 제작기 (0) | 2023.11.02 |
[프로젝트 김필여 - 10일차] 대규모 동시접속 TCP C# 서버 제작기 (0) | 2023.10.13 |
[프로젝트 김필여 - 9일차] 대규모 동시접속 TCP C# 서버 제작기 (0) | 2023.10.11 |
[프로젝트 김필여 - 8일차] 대규모 동시접속 TCP C# 서버 제작기 (2) | 2023.10.11 |