2014-01-09 2 views
0

나는 다음과 같은 코드가 있습니다서버 소켓을 다시 연결 문제

public class StartSocket{ 
    serverSocket = new ServerSocket(listenPort); 
    while (listening) 
     { 
      new ServerThread(serverSocket.accept()).start();   
     } 

} 

ServerThread가 클라이언트와 통신하는 데 사용됩니다. 하트 비트 메시지를 4 초마다 보냅니다. 대역폭 문제가 발생하면 클라이언트는 연결을 재설정하려고 시도합니다. 따라서 ServerThread은 계속 열리고 있습니다. 이로 인해 서버에 과부하가 발생합니다.

클라이언트의 재 연결 시도를 어떻게 관리합니까?

답변

1

서버에서 클라이언트를 식별하려면 ServerThread으로 지정하십시오. 서버상의 (서버상의) 서버 스레드에 대한 클라이언트 식별자 맵이 있어야합니다. 동일한 식별자를 가진 클라이언트가 연결되면 해당 클라이언트에 대한 이전 서버 연결을 닫습니다. 이렇게하면 하트 비트가 정당한 사유로 사망하고 클라이언트 당 클라이언트가 둘 이상의 연결을 가지지 않을 경우 클라이언트가 실제로 다시 연결할 수 있습니다.