Q&A

  • Indy에서 클라이언트쪽에 전원이 나갔을때..
안녕하세요. 이호림이라고 합니다.
Indy로 프로그램을  하나 만들고 있는데요...
서버와 클라이언트가 통신을 하고 있는도중 클라이언트쪽에서 랜선을 뽑으면
실제로 연결이 끊어 졌지만 서버에서는 연결되어 있는 상태로 있습니다.
다시 클라이언트에서 랜선을 끼우고 서버에 연결을 하면 서버는 연결이 2번 되어 있습니다. 1개는 이전에 연결이 끊어졌는데 서버에서 인식을 못해 오류연결정보이고 또하나는 다시 랜선을 끼우고 새로운 연결정보이죠...
그런데 문제는 서버에서 이전에 연결된 정보를 삭제하는 중 한... 5초정도 먹통이 되더군요... 서버가 먹통되면 모든 클라이언트에서 5초간 연결이 끊어지게 됩니다...

여러분은 서버에서 클라이언트 연결을 끊을때 어떻게 하고 있나요?
저는 AThread.Connection.Disconnect(); 이렇게 연결을 끊거든요....
부디 참고할만한 자료나 답변 부탁드립니다.
1  COMMENTS
  • Profile
    송기원 2004.11.22 22:06
    Indy site의 FAQ에 보시면 명확한 설명이 기재 되어 있습니다.
    참고로 클라이언트에서 disconnect될때에 상활에 따라 서버에서는 disconnect event가 발생하지 않을 수 있습니다.
    인디 관련문서에서는 명시적인 disconnect 호출시에 발생하는 event 라고 적혀 있구요...
    따라서 Network등이 기타장애, PC등의 기타 장애로 인한 비 정상적인 disconnet는 서버에서 감지 할 수 없습니다.
    정상적인 세션의 관리를 위해 주기적인 dummy packet을 날려서 서버쪽에서 clinet가 살아 있음을 확인하는 등의 부가적인 로직이 필요합니다.

    참고하세요..