>  기사  >  하트비트 메커니즘은 무엇을 의미하나요?

하트비트 메커니즘은 무엇을 의미하나요?

coldplay.xixi
coldplay.xixi원래의
2020-06-28 15:22:183876검색

하트비트 메커니즘은 연결의 유효성을 보장하기 위해 상대방에게 자신이 아직 살아 있음을 알리기 위해 정기적으로 사용자 정의 구조 [하트비트 패킷]을 보내는 메커니즘입니다. 하트비트처럼 고정된 시간마다 전송됩니다.

하트비트 메커니즘은 무엇을 의미하나요?

하트비트 메커니즘의 의미:

네트워크에서 데이터 수신 및 전송은 운영 체제의 SOCKET을 사용하여 구현됩니다. 하지만 이 소켓이 끊어지면 데이터를 보내고 받을 때 확실히 문제가 발생하게 됩니다. 하지만 이 소켓을 계속 사용할 수 있는지 확인하는 방법은 무엇입니까? 이는 시스템心跳机制에서 생성되어야 합니다.

관련 학습 권장사항: PHP 엔트리부터 마스터까지 프로그래밍

사실 TCP는 이미 하트비트라는 메커니즘을 구현했습니다. 하트비트를 설정하면 TCP는 일정 시간(예: 3초로 설정) 내에 설정한 하트비트 수(예: 2회)를 전송하며 이 정보는 정의한 프로토콜에 영향을 주지 않습니다. . 소위 "하트비트"는 사용자 정의 구조(하트비트 패킷 또는 하트비트 프레임)를 정기적으로 전송하여 상대방에게 "온라인"임을 알리는 것입니다. 링크의 유효성을 보장하기 위해. TCP中已经为我们实现了一个叫做心跳的机制。如果你设置了心跳,那TCP就会在一定的时间(比如你设置的是3秒钟)内发送你设置的次数的心跳(比如说2次),并且此信息不会影响你自己定义的协议。所谓“心跳”就是定时发送一个自定义的结构体(心跳包或心跳帧),让对方知道自己“在线”。 以确保链接的有效性。

所谓的心跳包就是客户端定时发送简单的信息给服务器端告诉它我还在而已。代码就是每隔几分钟发送一个固定信息给服务端,服务端收到后回复一个固定信息如果服务端几分钟内没有收到客户端信息则视客户端断开。

比如有些通信软件长时间不使用,要想知道它的状态是在线还是离线就需要心跳包,定时发包收包。发包方:可以是客户也可以是服务端,看哪边实现方便合理。一般是客户端。服务器也可以定时轮询发心跳下去。

心跳包之所以叫心跳包是因为:它像心跳一样每隔固定时间发一次,以此来告诉服务器,这个客户端还活着。事实上这是为了保持长连接,至于这个包的内容,是没有什么特别规定的,不过一般都是很小的包,或者只包含包头的一个空包。

在TCP的机制里面,本身是存在有心跳包的机制的,也就是TCP的选项。系统默认是设置的是2小时的心跳频率。但是它检查不到机器断电、网线拔出、防火墙这些断线。而且逻辑层处理断线可能也不是那么好处理。

一般,如果只是用于保活还是可以的。心跳包一般来说都是在逻辑层发送空的包来实现的。下一个定时器,在一定时间间隔下发送一个空包给客户端,然后客户端反馈一个同样的空包回来,服务器如果在一定时间内收不到客户端发送过来的反馈包,那就只有认定说掉线了。只需要send或者recv一下,如果结果为零,则为掉线。

但是,在长连接

하트비트 패킷이라고 불리는 것은 클라이언트가 정기적으로 간단한 정보를 서버에 보내 내가 아직 거기에 있음을 알리는 것입니다. 이 코드는 몇 분마다 고정된 메시지를 서버에 보내는 것입니다. 서버는 이를 수신한 후 고정된 메시지로 응답합니다. 서버가 몇 분 내에 클라이언트 메시지를 받지 못하면 클라이언트는 연결이 끊어진 것으로 간주됩니다.

예를 들어 일부 통신 소프트웨어를 오랫동안 사용하지 않는 경우 상태가 온라인인지 오프라인인지 알고 싶다면 하트비트 패킷이 필요하고 정기적으로 패킷을 보내고 받습니다. 계약 발신자: 클라이언트 또는 서버 중 더 편리하고 합리적인 쪽이 될 수 있습니다. 일반적으로 클라이언트. 서버는 주기적으로 하트비트를 폴링하고 보낼 수도 있습니다.

하트비트 메커니즘은 무엇을 의미하나요?하트비트 패킷하트비트 패킷이라고 불리는 이유는 하트비트처럼 정해진 시간마다 전송되어 클라이언트가 아직 살아 있음을 서버에 알리기 때문입니다. 사실 이는 긴 연결을 유지하기 위함이다. 이 패킷의 내용은 특별한 규정은 없으나 일반적으로 아주 작은 패킷이거나 헤더만 들어 있는 빈 패킷이다.

🎜TCP 메커니즘에는 TCP 옵션인 하트비트 패킷 메커니즘이 있습니다. 시스템 기본 설정은 2시간 하트비트 빈도입니다. 그러나 시스템 정전, 네트워크 케이블 분리 또는 방화벽 연결 끊김은 감지할 수 없습니다. 더욱이 논리 계층은 연결 끊김을 처리하기가 쉽지 않을 수 있습니다. 🎜🎜일반적으로 그냥 살려주는 용도라면 괜찮습니다. 하트비트 패킷은 일반적으로 논리 계층에서 빈 패킷을 전송하여 구현됩니다. 다음 타이머는 특정 시간 간격으로 빈 패킷을 클라이언트에 보내고 클라이언트는 동일한 빈 패킷을 다시 피드백합니다. 만약 서버가 일정 시간 내에 클라이언트가 보낸 피드백 패킷을 받지 못하면, 확인 오프라인이라고 하더군요. 그냥 보내거나 수신하세요. 결과가 0이면 오프라인 상태라는 뜻입니다. 🎜🎜단, 긴 연결에서는 오랫동안 데이터 교환이 없을 수 있습니다. 이론적으로는 이 연결이 항상 연결되어 있지만 실제로는 중간 노드에 장애가 있는지 알기 어렵습니다. 더 나쁜 점은 일부 노드(방화벽)가 일정 기간 내에 데이터 상호 작용이 없는 연결을 자동으로 끊는다는 것입니다. 🎜🎜이때 긴 연결을 유지하고 활성 상태로 유지하려면 하트비트 패킷이 필요합니다. 연결 해제를 학습한 후 서버 로직은 연결 해제 후 데이터를 정리하고 다시 연결하는 등 몇 가지 작업을 수행해야 할 수 있습니다. 물론 이는 필요에 따라 로직 계층에서 자연스럽게 수행됩니다. 일반적으로 하트비트 패킷은 긴 연결의 연결 유지 및 연결 해제 처리에 주로 사용됩니다. 일반적인 용도의 경우 판단 시간은 30~40초 정도가 비교적 좋다. 요구 사항이 매우 높으면 6~9초로 설정하세요. 🎜🎜🎜🎜

위 내용은 하트비트 메커니즘은 무엇을 의미하나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.