본문 바로가기

iocp9

IOCP 서버 제작 실습 10 추가로 구현해야하는 내용들 정리 기능 추가 채팅방에 속한 유저 리스트 기능 귓속말 기능 채팅방 방장, 강퇴 기능 Redis DB에 저장된 비밀번호 변경 최적화 좀 더 발전된 함수들 사용 (GetQueuedCompletionStatusEx 함수 등) 서버 코드 내에서 각종 수치(최대 클라이언트 수 등)들을 지정하는 것이 아니라 입력받도록 설정 동적 할당 최소화 Lock 최적화 구조 버퍼 구조를 어떻게 하면 더 잘 짤 수 있을지 고민 프로그램을 부분별로 나누어 정적 라이브러리로 활용 클라이언트 Reference 클라이언트가 아닌 나만의 클라이언트 만들어보기 서버의 스트레스 테스트가 가능하도록 더미 클라이언트 구현 2023. 3. 27.
IOCP 서버 제작 실습 9 추가로 로그아웃 기능을 구현 Logout 로직 기본적인 작동 방식은 Login과 동일 [PacketManager] LOGOUT_REQUEST 패킷을 받아 ProcessLogout() 함수 호출, REQUEST_LOGOUT Task를 생성 [RedisManager] REQUEST_LOGOUT Task를 받아 ProcessLogout() 함수 호출, RESPONSE_LOGOUT 패킷을 생성 [PacketManager] REQUEST_LOGOUT 패킷을 받으면 ProcessLogoutDBResult() 함수를 호출 유저가 Room에 들어가있는 상태라면 RoomManager의 LeaveUser() 함수를 호출하여 Room에서 제거 유저 정보도 UserManager의 DelUser() 함수를 호출하여 리스트에서 .. 2023. 3. 27.
IOCP 서버 제작 실습 7 DB로 Redis를 연동하여 로그인 작업을 구현 PacketManager의 Run() 함수 실행시 RedisManager 객체를 생성하여 Init() 및 Run() 함수 실행 Connect() 함수에서 Redis DB와 연동한 후 DB 작업을 수행하는 쓰레드를 생성하여 ProcessTask() 함수 실행 ProcessTask() 함수에서는 deque에 RequestTask가 있다면 해당 Task에 맞는 작업을 수행 Login 로직 [PacketManager] 패킷 처리 쓰레드의 ProcessPacket() 함수에서 수신된 패킷 데이터를 확인하여 패킷Id가 LOGIN_REQUEST일 경우 ProcessLogin() 함수 실행 [PacketManager] ProcessLogin() 함수에서 서버의 최대 접속.. 2023. 3. 25.
IOCP 서버 제작 실습 6 서버의 종류를 에코 서버에서 채팅 서버로 변경 패킷과 유저를 관리하기 위한 PacketManager와 UserManager 및 User 클래스를 추가 네트워크 라이브러리(IOCPServer.h / ClientInfo.h / Define.h) 및 main.cpp는 기존과 동일(단, EchoServer 클래스의 명칭이 ChatServer로 바뀜) 데이터 패킷 수신 로직 [ClientInfo] 클라이언트 등록시 + 비동기 I/O Recv 작업 완료시 BindRecv()에서 WSARecv() [IOCPServer] Worker 쓰레드에서 비동기 Recv 작업 완료 감지 [ChatServer] OnRecieve() [PacketManager] ReceivePacketdata() [User] SetPacketDat.. 2023. 3. 23.