6/11
채팅 서버를 스트레스 테스트 하기 위해 더미 클라이언트를 만들었다.
사용자로부터 입력을 받아 더미 클라이언트를 생성하고 채팅서버로 접속한 후 일정 시간 마다 정해진 문자열 데이터를 서버로 전송한다. 과부하를 주기 위해 채팅 서버에서는 입력받은 데이터를 접속중인 모든 더미 클라이언트한테 전달한다. 현재는 단순히 접속하고 데이터만 전송하지만 추후에 랜덤하게 접속을 끊고 서버에 다시 접속하여 더 많은 경우를 테스트하려고 생각중이다.

50개의 더미클라이언트를 접속하고 sendPacketTPS와 recvPacketTPS를 재어보니 아래와 같았다.

✅ 더미 클라이언트 접속 끊기
더미 클라의 접속을 끊으려고 하다보니 CoreNetwork에서 관리하는 sessions가 문제가 되었다. ( vector로 관리 중 )

지금까지는 sessions를 접근할때 어차피 끊는 경우가 없기 때문에 동기화가 필요 없었는데, 이제 연결을 끊어야 하니 동기화 객체가 필요해졌다. 문제는 sessions에 접근해서 session을 찾는 FindSession 함수의 호출 횟수가 매우 잦아서 때문에, 일일이 동기화 객체를 사용하면 오버헤드가 심할 것이라고 자체판단했다.
vector 대신 배열을 사용하고, 배열에 접근하는 index를 따로 관리하는 방법으로 변경해야겠다.
'ChattingServer' 카테고리의 다른 글
[ChattingServer] Lockfree Stack을 이용해 session 관리 (0) | 2025.06.20 |
---|---|
[ChattingServer] ObjectPool을 이용해 Packet 수정 (0) | 2025.06.15 |
[ChattingServer] 채팅 서버 프로토콜 (0) | 2025.06.06 |
[ChattingServer] CriticalSection으로 SendQueue 동기화 (1) | 2025.06.06 |
[ChattingServer] SendComplete ( WSASend 통지 완료 처리 ) (0) | 2025.06.02 |