신입 개발자가 작성한 연구일지입니다. 이때 오해하고 있던 잘못된 정보가 포함되어 있습니다.
목표
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# 서버 제작기
이제 기능은 하는 것 같으나, 문제가 많습니다...
문제1) 너무 느리다 .. 정말 느리다.
문제2) 클라이언트가 '제대로 연결을 해제한 경우' 에만 오브젝트 풀링이 정상적으로 작동합니다.
문제3) 스레드풀이 잘 작동하고 있는지 모르겠습니다. 처음에는 스레드가 일사분란하게 작동하는 것 같다가, 9번째 연결부터는 동기식으로 작동하는 것처럼 보이고 있습니다.
특히 오브젝트 풀링에 대해서는 3일차에 오픈소스로 가져왔던 코드를 파악해야 문제를 해결할 수 있다는 문제가 있습니다.
앞으로는 오픈소스를 가져올 때 코드를 잘 확인하고 가져 와야겠습니다. ㅠㅠ
지금 확인해 보니, 제가 퍼온 오픈소스에 star 가 8개네요 ... 너무 섣불리 고른 건 아닌가 하는 생각이 듭니다. 조금 더 비교해 볼걸!
문제 1에 대하여
속도에 관련된 부분보다는 에러가 나는 부분을 손보는 것이 좋을 것 같습니다.
문제 3에 대하여
문제 3을 설명하기 위해서 로그를 첨부했습니다.
저는 연결이 설정되었을 때, 서버 스레드가 일사분란하게 움직였으면 좋겠습니다.
동기적이 아닌, 비동기적으로요!
하지만 로그를 보면, 처음에는 스레드가 잘 작동하는가 하더니 나중 가서는 동기적으로 작동하고 있습니다. 왜 그런걸까요 ㅠ
>> 해결!
우와 ㅠㅠ 정말 감동적입니다. 원인은 오브젝트 발급이었던 것 같습니다 ㅜㅠ 오브젝트 할당에 너무 많은 리소스가 소요되어, 마치 동기식으로 작동하는 것처럼 보였던 것 같습니다.
아마 위 그림같은 상태였던 거 아닐까요? 제 생각입니다. 만약 아니더라도 이렇게 바꾸려고 합니다. 여러 클라이언트가 연결 해제를 요청하는 경우, lock 을 걸어 동기식으로 풀에 메모리 반환이 이루어져야 하니까요.
문제 2에 대하여
오브젝트 풀이 멀티스레드 환경을 커버하지 못하고 있는 것 같습니다. 오픈소스에 오브젝트 해제 관련 lock이 필요할 것 같습니다.
오브젝트 해제에 lock 이 걸리면 작동이 느려질텐데, 걱정이 됩니다. 그리고 어느 부분에 lock을 걸어야 하는지도 고민이 필요할 것 같습니다.
앞으로의 계획
오브젝트 풀에 스레드 할당하고 lock 설정하기
연결 ID 부여, ID 딕셔너리 발행하여 검색 속도 최적화
다음 글 : 2023.07.05 - [일지/미니프로젝트] - [프로젝트 김필여 - 5일차] 대규모 동시접속 TCP C# 서버 제작기
[프로젝트 김필여 - 5일차] 대규모 동시접속 TCP C# 서버 제작기
목표 30000명이 동시에 접속할 수 있는 TCP 서버 만들기 30000명의 클라이언트는 전송 - 수신 - 전송 - 수신 을 반복한다. 30000명의 클라이언트를 켜 놓고, 다음날 서버가 에러 없이 살아 있는 것을 목
develop-jen.tistory.com
'Side Project > 안양시장 프로젝트 - TCP 서버개발' 카테고리의 다른 글
[프로젝트 김필여 - 6일차] 대규모 동시접속 TCP C# 서버 제작기 (0) | 2023.07.24 |
---|---|
[프로젝트 김필여 - 5일차] 대규모 동시접속 TCP C# 서버 제작기 (0) | 2023.07.05 |
[프로젝트 김필여 - 3일차] 대규모 동시접속 TCP C# 서버 제작기 (0) | 2023.06.28 |
[프로젝트 예수 - 2일차] 대규모 동시접속 TCP C# 서버 제작기 (0) | 2023.06.27 |
[프로젝트 예수 - 1일차] 대규모 동시접속 TCP C# 서버 (0) | 2023.06.26 |