|
제가 썼던 방법은....(지금은 Indy를 안쓰지만.. 어쨋든 =_=;;;)
1. 커넥션마다 Send Thread를 하나 추가로 만듭니다. 그리고 Write용 Stream을 하나 생성합니다
2. Write할 때는 Stream에 Write 합니다.
3. SendThread는 Write Stream에 데이터가 있을 경우, WriteStream의 데이터를 몽땅 카피해서 가져 오고 WriteStream을 비웁니다. (물론 락 처리는 필수)
4. SendThread는 데이터 전송 합니다(아무리 느려도 언젠간 가것거니~ 하고)
5. 3으로 갑니다.
Ps. Write시 Stream 사이즈가 일정이상 커지면 커넥션 끊어버립니다. 서버 죽으면 안된까
용맨소녀 님이 쓰신 글 :
: 클라이언트A 인터넷 속도를 4KB정도로 잡고.. 클라이언트B와 서버는 광랜 속도 그대로 설정했습니다..
:
: 서버에서 A,B순대로 200KB 짜리 패킷을 전송했습니다..
:
: 그러자 A에 WriteBuffer 할 때 수십초의 대기시간이 발생하더군요.. B의 경우는 순식간에 전송이 끝났고요..
:
: 암튼 문제의 A때문에 멀쩡한 B의 패킷 받는 시간이 엄청 느려진거지요..
:
: 극단적인 테스트 환경이긴 한데, 암튼 서버를 만들었는데, 이런 현상이 생기면 안될 것 같은데요..
:
: 그래서 각 유저별로 타이머 변수를 만들어서 WriteBuffer직전에 User->Timer = timeGetTime() 하고...
:
: TTimer를 하나 만들어서 안에다 timeGetTime() - User->Timer 한 값이 5초 정도를 초과하면 강제로 Disconnect()시켰는데, 이것도 금방 되지는 않고 지연되는 시간이 있더라고요..
:
: 뭐 좋은 방법이 없을까요?
|