Q&A

  • IndyServerSocket 초보사용자...
안녕하세요 델파이 초보자입니다.
다름이 아니라 Socket서버를 하나 만들려고 합니다.
기존의 TServerSocket으로 구현은 많이 해봐서 잘 해결하였으나, 동시 접속이 문제가
되었습니다. Client를 Multithread로 구현하여 100개의 클라이언트 소켓을 생성후
서버로 한꺼번에 접속하여 보았습니다. 그런데 TServerSocket에서 50%도 켓취를 못하고
GetThread이벤트를 내보내지 못하더군요.(threadcash를 늘려가면서 해보았습니다.)

1.제가 잘 모르고 있는건지 아님 원래 그 정도는 안받아 주는지 알고 싶습니다.


그래서 할수 없이 IndyServerSocket을 쓰기로하였습니다.
Indy의 Thread Execute는 lisetenQueue를 100으로 하였을경우 크리티컬섹션을 쓰던
그냥 하던 100개의 클라이언트를 동시에 받아 주었습니다. 그런데 indy가 기본 Thread에 Blocking모드 인거 같더군요. Receive함수가 모두 Blocking모드로 동작하는것 같습니다. 읽고 싶은 Byte를 주면 그 Byte를 다 읽을 동안 기다리다 채워지지 않으면 Timeout으로 빠지더군요.(제가 테스트를 잘 못하였을 수도 있지만..) 그렇지 않으면 특정문자가 올때까지 기다려야 되더군요. ㅡㅡ;;; 제가 지금 만들 서버는 가변적인 데이터를
받아서 처리를 해야 되고 데이터 검증을 거쳐 한 패킷을 버려야 하거든요.
기본 컴포넌트의 ReceiveText와 같은 기능도 있어야 하는데 Indy는 Blocking모드라서
지원이 안되는듯 하였습니다.

2. 제가 테스트를 잘 못하였다면, 지적하여 주시고 다른 방안이 있으면 조언 부탁드립니다.

3. 만약 Indy가 위와같이 수행을 못한다면, 기존 TServerSocket이나의 사용이나 다른 컴포넌트를 추천해주시면 고맙겠습니다.

이상 왕초보의 Indy겉핥기 였습니다. 읽어 주셔서 감사하고요. 즐 코딩하세요.
0  COMMENTS