C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[63423] Re:인디9 서버에서 WriteBuffer 테스트 해봤는데요..
Lyn [tohnokanna] 1047 읽음    2011-01-06 13:00
제가 썼던 방법은....(지금은 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()시켰는데, 이것도 금방 되지는 않고 지연되는 시간이 있더라고요..
:
: 뭐 좋은 방법이 없을까요?

+ -

관련 글 리스트
63418 인디9 서버에서 WriteBuffer 테스트 해봤는데요.. 용맨소녀 965 2011/01/06
63423     Re:인디9 서버에서 WriteBuffer 테스트 해봤는데요.. Lyn 1047 2011/01/06
63426         Re:Re:인디9 서버에서 WriteBuffer 테스트 해봤는데요.. 용맨소녀 906 2011/01/07
63427             Re:Re:Re:인디9 서버에서 WriteBuffer 테스트 해봤는데요.. Lyn 1066 2011/01/07
63429                 답변 감사합니다.. 용맨소녀 1007 2011/01/07
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.