|
안녕하세요!
indy TCP 서버 컴퍼넌트에서 도저히 처리가 않되는게 있습니다..
고수님들 어케 하셨는지 한수 부탁 드립니다.
클라이언트--> API 수준에 준해서 프로그램
서버 --> Indy 서버
다음과 같이 가정을 하면...
1)indy TCP 서버로 로비서버를 만든후 클라이언트가 로비 서버에 접속
을 합니다..
2)그런후 클라이언트의 랜선을 분리 시킵니다.
3)수십초후 클라이언트는 예외가 발생됩니다
고찰 ====> 랜선을 분리 시킨 이유는 접속중인 상태에서 클라이언트가
갑작스런 정전이나 데드락등으로 인한 상황을 만들기 위해서
입니다.
다음과 같은 문제점이....
1) 서버측에도 예외가 발생 해야 합니다.
그러나 발생되지 않습니다.
2) 랜선을 분리 시킨후에도 서버측에선 분리된 클라이언트의 소켓이
존재 하는거 같습니다 또한 쓰레드또한 그렇구여
그 이유는 서버측에서 클라이언트로 패킷을 날릴수 있으니깐여...
3) 여기서 쓰레드를 terminate 시키거나 소켓을 닫을수는 있습니다
하지만 문제는 클라이언트쪽에서 그런 상황이 발생되었다고
서버측은 알수가 없다는거져 서버측에서 이와 같은 예외를 알수
있는 방법이 없는가요 ?
문제 해결>
그와 같은 상황을 처리 하기 위해서 주기적으로 서버는
접속한 클라이언트가 서버에 붙어 있는지 알기 위해서 패킷을
날려서 그 패킷에 대한 응답이 없을경우에 위와 같은 상황이
발생했다고 가정하고 쓰레드랑 소켓을 닫는 처리를 했습니다..
이와 같은 작업의 오버헤드가 따르는거 같습니다...
그럼 즐 프 하십시요..
그래서... 이렇게 글을 올립니다...
|