|
박정만 님이 쓰신 글 :
: 여러 분들의 답변들을 보고, 소켓 컴포넌트의 성능이 좋지 않다는 것을 알았습니다.
: IOCP인가..(가물~)가 가장 좋다고요..
:
: 그런데, 소켓 컴포넌트가 아닌 API를 쓸때, 쓰레드를 안쓰고 최대 접속수만큼 루프를 돌려서 순차적으로 클라이언트를 처리하는 방법은 어떠한가요?
:
: 그러니깐..
:
: for(i = 0; i < MAX_CLIENT_NUMBER; i++)
: {
: i번째 클라이언트 처리
: }
:
: 이런 방식으로 하면 성능이 떨어질까요? 대개 4000개 이상을 처리할때는 무리가 있나요?
무리가 있다고 봅니다..필요없이 돌아야하니까요..
차라리 그러실려면 TCP/IP를 사용하실거면 Socket에 대한 Packet을 일반적으로
정하게 되죠.. 그럼 그 Packet Struct안에 Client에 대한 정보를 저장하는
부분을 추가하여 그정보를 가지고 바로 클라이언트를 처리하는게
불필요한 동작을 줄일수 있는 방법이겠죠..
ex)
typedef struct {
char STX;
.
.
char ClientInfo[4];
.
char ETX;
} PACKET, *PPACKET;
PPACKET pPacket = (PPACKET)Socket Receive Data;
char szTemp[5];
memset(szTemp, 0x00, 5);
memcpy(szTemp, pPacket->ClientInfo, sizeof(pPacket->ClientInfo));
int i_ClientNo = atoi(szTemp); <--- 해당 Client번호
i_Client번쨰.. 클라이언트처리...
|