원인은 스레딩과 관련이 있는것 같긴한데
우선 서버에서
/*
lpList = TCPServer->Contexts->LockList();
for(int i = 0; i < lpList->Count; i++)
{
TIdContext *lpContext = (TIdContext *)lpList->Items[i];
SendStream->Position = 0;
lpContext->Connection->IOHandler->Write(SendStream, 0, true);
// 보내는 속도 측정
SendSize += (HEADER_SIZE + Size);
}
TCPServer->Contexts->UnlockList();
*/
SendStream->Position = 0;
AContext->Connection->IOHandler->Write(SendStream, 0, true);
// 보내는 속도 측정
SendSize += (HEADER_SIZE + Size);
요렇게 해보면 모든 클라에게 데이타를 보내는 구조는 아니지만 상당히 안정적으로 바뀝던데
99개의 클라를 10ms 타이머로 해도 좀처럼 문제가 안생기던데 (딱한번 생김)
딱히 원인을 모르겠어요, 인디 싫어졌음,. ㅜ,ㅜ
용맨소녀 님이 쓰신 글 :
: 쓰레드 안에서 패킷을 받는게 문제인가요? 커넥션마다 독립적인데요.. 인디 예제같은거 봐도 쓰레드 안에서 받고 그러지 않나요?
:
: roEhd 님이 쓰신 글 :
: : 클라 소스도 보세요
: :
: : Lyn 님이 쓰신 글 :
: : : Read 는 어차피 한 Thread에서밖에 호출 안하고 Write 는 LockList로 묶여있기 때문에 상관 없습니다.
: : : printf야 애초에 safe던 아니던 알바아니고 ...
: : :
: : : roEhd 님이 쓰신 글 :
: : : : 내 생각엔 스레드 문제 같습니다.
: : : : Context->IOHandler->ReadStream(RecvStream);
: : : : Context->IOHandler->Write(SendStream, 0, true);
: : : : 같은 함수는 Thread-Safe 가 아닐 겁니다.
: : : : 심지어 printf 조차 Thread-Safe 가 아닌걸로 압니다.
: : : :
: : : : 용맨소녀 님이 쓰신 글 :
: : : : : 단순화해서 한 번 만들었는데요..
: : : : :
: : : : : 한 번씩 패킷이 깨져서 오는 경우가 있어요..
: : : : :
: : : : : 서버에서 클라로 보내는 속도는 초당 17메가고 클라에서 서버로 보내는 속도는 초당 500KB 정도 됩니다..
: : : : :
: : : : : 70ms마다 30명이 패킷을 날리면 서버는 그걸 모든 클라이언트에게 되돌려줍니다..
: : : : :
: : : : : 그냥 컴터 하나에 서버, 클라 둘 다 실행하면 됩니다..
: : : : :
: : : : :
: : : : :
: : : : : 덧붙임 : Stream으로 처리해서 그런지 처리 속도가 늦어서 그런 감도 있는 것 같네요.. 다른 방법으로도 테스트 해봐야겠네요..