네트워크 하트비트 패키지 처리
네트워크 차단 오프라인 이상 처리: HeartBeat 네트워크 하트비트 패키지
한 번은 개인적인 이해입니다. 인터넷 심장 박동 패키지의 처리 방식은 두 가지가 있습니다.
방식1: 터미널이 자발적으로 시작하고 서버가 각 터미널의 마지막 패키지 시점을 기록한 다음에 모든 클라이언트를 정시에 스캔합니다. 만약에 스캔 시점과 마지막 패키지 시점의 간격이 시간 초과 시간보다 크면
시간 초과 사건이 발생하다.서버가 클라이언트 정보 기록을 지웁니다.
방식2: 서버가 자발적으로 시작하고 서버가 정시에 하트비트 패키지를 보내며 클라이언트가 몇 번이나 응답하지 않았는지 기록하면 시간 초과 사건이 발생한다고 생각한다.여러 번 응답을 받지 못했지만 일정 범위 내에서 응답을 받았다면,
기록을 지웁니다.응답이 일정량에 도달하지 않으면 기본 네트워크 이상이 발생합니다.
typedef struct tagSocketPacket
{
CString tagStrDeviveID;
SOCKET tagSocket;
SYSTEMTIME tagRecTimer;
}SocketPacket,*pSocketPacket;
typedef vector<SocketPacket> vectorSocketPacket;
void HeartBeat(SOCKET socket)
{
SYSTEMTIME timer;
SocketPacket socketPacket;
vectorSocketPacket::iterator it;
for (it = myVectorPacket.begin(); it != myVectorPacket.end(); it++)
{
if (socket == (*it).tagSocket)
{
GetSystemTime(&timer);
socketPacket = (*it);
socketPacket.tagRecTimer = timer;
myVectorPacket.erase(it);
VectorPacket_insert(socketPacket);
break;
}
}
}
void VectorPacket_insert(SocketPacket socketPacket)
{
myVectorPacket.push_back(socketPacket);
}
BOOL IsTimeOuts(SYSTEMTIME Timer)
{
SYSTEMTIME sysTimer;
GetSystemTime(&sysTimer);
DWORD times1, times2;
times1 = Timer.wHour*3600+Timer.wMinute*60+Timer.wSecond;
times2 = sysTimer.wHour*3600+sysTimer.wMinute*60+sysTimer.wSecond;
if (times2 - times1 > TIMEOUTS)
{
return TRUE;
}
return FALSE;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
자바스크립트로 타이머 만들기JavaScript와 HTML만 사용하여 간단한 타이머를 만들어 보겠습니다. 먼저 인터페이스를 만들고 HTML만 사용하여 간단한 작업을 수행합니다. HTML 구조에서 시간 정보를 표시하기 위해 일부span가 생성되었...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.