2013-03-29 11 views
-1

서버는 클라이언트 연결 손실을 어떻게 알 수 있습니까? 이 이벤트가 발생합니까? 이것은 연결 손실이 발생하기 전에 실행할 수 있도록 코드 (서버 측)를 저장할 수 있습니까? 너무 오랫동안 유휴 상태서버와 클라이언트 간의 연결 손실 감지

  • : 경우

    이 연결 손실이 발생할 수 있습니다.

  • 클라이언트 측 종료되었습니다.

내가 JSP 및 PHP에 특히 요구하고이.

+1

일반적으로? 특정 언어로? 특정 유형의 서버 및 연결? 자세한 내용을 입력하십시오. – deceze

답변

3

당신이 말하는 프로토콜에 따라 다르지만 일반적으로 "연결"은 3 방향 핸드 셰이크를 통해 이루어 지므로 양 당사자가 현재 "연결"되었음을 간단히 동의하게됩니다. 즉, 양 당사자는 테이블에 IP a.b.c.d의 포트 x에 대한 연결이 열려 있고이 "연결"과 관련된 컨텍스트가 있음을 의미합니다. 그런 다음 "연결"에서 들어오는 모든 데이터가 연결된 컨텍스트로 전달됩니다.

그게 전부입니다. 실제 "물리적 인"연결은 없습니다. 그것은 양당 간의 합의 된 국가 일뿐입니다.

프로토콜에 따라 적절한 패킷을 사용하여 공식적으로 연결을 종료 할 수 있습니다. 한 쪽에서 상대방에게이 패킷을 보내어 "연결"이 종료되었음을 알립니다. 두 당사자가 테이블 항목을 제거하고 그 것입니다.

이 패킷이 전송되지 않고 연결이 중단되면 어느 쪽도 알 수 없습니다. 한 당사자가 다른 사람에게 데이터를 보내려고 할 때만이 문제가 분명해질 것입니다.

프로토콜에 따라 특정 시간 동안 데이터가 수신되지 않으면 연결이 자동으로 부실로 간주되어 종료 될 수 있습니다.이 경우, 연결이 끊어지면 더 일찍 알아 차릴 수 있지만 양측간에 일정한 일정한 시간이 필요합니다.

요약하면 그렇습니다. 트리거 될 수있는 서버 이벤트가 있지만 트리거 될 수있는 것은 아닙니다.

+0

내가 서버 언어로 PHP를 사용하고 있다면 그 이벤트를 잡을 수 있습니까? 또는 서버의 특성이이 프로세스와 다를 때? –

+0

PHP 서버에 어떤 종류의 연결을 만드십니까? 99 %의 PHP 스크립트가 HTTP 요청에 응답합니다. HTTP 요청은 처음에는 매우 짧은 시간 동안 연결됩니다. – deceze

+0

은 세션을 기반으로합니다. 내가 원하는 것은 클라이언트가 종료되기 전에 트리거를받는 이벤트 (존재하는 경우)를 감지하는 것입니다. 내가 클라이언트 측 종료시 세션을 파괴하고 싶다고 말할 수 있습니다. –

2

소켓을 닫으면 상대방의 소켓에 알립니다. 그러나 연결이 비정상적으로 손실 된 경우 (예 : 네트워크 케이블이 연결되어 있지 않거나 컴퓨터의 전원이 꺼진 경우) 사용자는 알 수 없습니다.

이 문제를 해결하기 위해 연결을 확인하기 위해 정기적 인 메시지를 보낼 수 있습니다. 전송에 실패하면 연결이 중단됩니다. 소켓을 설정하여 합리적인 시간 동안 만 기다려야합니다.

0

일반적인 클라이언트 서버 아키텍처에 대해 이야기하는 경우 서버는 클라이언트 연결에 대해 걱정할 필요가 없습니다. 클라이언트 만 서버에 연결해야합니다. 클라이언트는 연결 해제 메시지를 주기적으로 보내거나 이와 유사한 방법으로 시간 초과를 피하기 위해 연결이 끊어지지 않도록 조치를 취해야합니다.

0

왜 서버가 연결 손실/종료에 대해 신경을 써야합니까?

서버 작업은 클라이언트에서 오는 요청을 처리하는 것입니다. 그게 전부 야. 클라이언트가 서버에서 예상 한 데이터를받지 못하면 적절한 조치를 취할 수 있습니다. 서버가 클라이언트에 데이터를 제공하기위한 일부 처리를 수행 할 때 연결이 끊어지면 그러면 서버는 http 요청이 클라이언트에 의해 시작되므로 많은 일을 할 수 없습니다.

그래서 클라이언트가 어떤 이유로 응답을받지 못하면 새로운 요청을 할 수 있습니다.

관련 문제