ㅇ 서버와 클라이언트가 따로 실행되고 있었습니다. 그리고 서버가 죽을때 연결된
각 클라이언트에게 서버가 죽고 있다는 메시지를 소켓으로 뿌려주도록 했습니다.
그런데 서버가 죽고 다시 가동된 후에 서버가 죽고 잇다는 메시지를 미처 받지 못한
클라이언트들(=서버가 죽을 당시 가동이 되어 있지 않았던 클라리언트들)에게는
다시 가동이 될때야 그 메시지가 들어 오는 거예요.... 이거 방지 할 방법 없나요?
제가 생각 하기론 아마도 전에 연결되었던 아니면 다른 정보들이 메모리에 남아
있다가 그제서야 메시지를 전송 한것 같은데 그 메모리들을 지울 수는 없나요?
조언 좀 부탁합니다.
또, 그렇게 메모리를 지워버리면 이미 접속된 클라이언트 정보도 날라가버리지는 않습
니까? 그래서 그당시 그 클라이언트에 대한 정보만 지워버릴 수는 없습니까?
한가지더 이런것들이 불가능 하거나 비효율적이라면 서버와 클라이언트 소켓이 다시
가동될 시점에서 남아 있던 소켓의 정보를 Initialize 시키는 방법은 없나요?
자세한 설명 부탁드립니다. 여러 고수님들의 조언을 기다립니다..../
서버가 죽는 경우는 일단 사용자가 프로그램을 종료할 때도 있지만 시스템이 이상한 이유때문에 죽는 경우가 있습니다.
그러므로 서버가 죽을 때 클라이언트들에게 "야, 나 죽는다, 조금 있다 다시 나한테 로긴해" 하는 메세지를 보내는 것은 그리 효율적이지 못합니다. 그리고 종료하면서 메세지를 보내는 것은 상당히 위험하구요.
따라서 Client에서 Timer를 이용하여 OnDisconnect 이벤트에서 Timer를 Enable시켜서 일정시간후 다시 로긴을 하는 방법을 채택하시는 것이 좋을 것입니다.
두번째...
서버나 클라이언트가 비정상적으로 종료될 때 상대방에서 OnDisconnect나 OnClientDisconnect 이벤트가 발생되지 않을 수 있는 경우가 많습니다. 이 경우 주기적으로 클라이언트, 서버 모두 상대방에게 쓰레기 데이터를 Send하여 Error가 나는지 나지 않는지를 체크해 줘야 합니다. Unix도 이런 방법을 쓴다고 하던데 사실인지는 잘 모르겠고..