웹소켓 심장박동 패키지의 실현 방안
5479 단어 socket
웹소켓 심박수 패키지의 실현 방안 05/30/2010
현재 인터넷 환경은 복잡하게 뒤섞여 있다. 소켓 심박수는 건강하고 튼튼한 연결을 얻는 효과적인 해결 방안이다. 오늘 우리는 웹 소켓에서 심박수 방안을 실현한다. 그렇다. 비록 우리는 간단한 채팅방을 만들 뿐이지만 우리는 그를 안정적이고 믿음직하게 하는 것은 조금도 틀리지 않다.
내 심장 박동 패키지 방안은 매우 간단하다. 원리는 간격을 두고 심장 박동 패키지 데이터를 서버에 보내는 것이다. 서버는 일정 시간 내에 심장 박동 패키지 응답을 되돌려주고 시간 제한을 비교한다. 만약에 설정된 시간 초과 시간을 초과하면 현재 서버와의 웹 소켓 연결이 끊어졌다고 생각하고 현재 웹 소켓 연결을 닫고 뒷처리를 한다. 예를 들어 다시 연결하거나 알림을 팝업한다.
비교적 유용한 핵심 코드는 다음과 같다.
function keepalive( ws ){
var time = new Date();
if( last_health != -1 && ( time.getTime() - last_health > health_timeout ) ){
// ,
$("#keeplive_box").html( " ." ).css({"color":"red"});
//ws.close();
}
else{
$("#keeplive_box").html( " " ).css({"color":"green"});
if( ws.bufferedAmount == 0 ){
ws.send( '~H#C~' );
}
}
}
이것이 바로 심장 박동 함수로 심장 박동 패키지를 보내고 심장 박동의 건강도를 측정한다.웹 소켓의 onopen 이벤트에 심어서 심장 박동 검사를 시작합니다.이렇게:
var ws = new WebSocket( to_url );
ws.onopen=function(){
$("#statustxt").html("connected.");
$("#send_btn").attr("disabled", false);
heartbeat_timer = setInterval( function(){keepalive(ws)}, 1000 );
}
그렇습니다. 이렇게 하면 웹 소켓의 하트비트 패키지를 실현할 수 있습니다. 여기는 다선정 전송 방식과 유사합니다. 하트비트 패키지를 보내는 동시에 정상적인 데이터 통신에 영향을 주지 않습니다. 우리의 예는 지난번 웹 소켓 채팅방에서 개선한 것입니다. 하트비트 패키지가 실행되는 과정에서 우리의 정상적인 채팅을 방해하지 않는다는 것을 알 수 있습니다.서비스 쪽에서 저도 약간의 수정을 했습니다. 원리는 유사합니다. 일정 시간 동안 클라이언트가 보낸 심장 박동 패키지를 받지 못했기 때문에 이 클라이언트는 이미 오프라인 상태이고 연결을 닫고 자원을 회수했다고 생각합니다.
데모는 여기 있습니다:http://img.zendstudio.net/libs/websocket/chat/demo2.html
지금 새로운 문제가 생겼습니다. 만약에 우리가 phpsocket으로 심박수 패키지 기술을 모의하려면 어떻게 실현해야 합니까?지나가는 친구들 많이 가르쳐 주셔서 감사합니다.
| 댓글 3개 태그:html 、 html5 、 websocket
댓글 3개
▼-
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
React 구성 요소에서 소켓 이벤트 리스너가 여러 번 실행됩니다.기본적이지만 종종 간과되는 사이드 프로젝트를 하면서 배운 것이 있습니다. 이 프로젝트에는 단순히 두 가지 주요 부분이 포함되어 있습니다. 프런트 엔드: 반응 및 재료 UI 백엔드: Express, Typescript...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
Sweet
06/14/201013:45
안녕하세요!코드 글꼴이 편해요. 어떤 글꼴인지 알려주시겠어요?zend studio 5.5.1을 사용합니다. 글의 코드 글꼴로 수정할 수 있습니까?감사합니다!p>
yahveh
06/22/201021:39
어느새 부담을 가중시켰지, php의 socket 효율은 정말 별로야.
WebSocket.class.php
private $Connection=array();
$c = new Connection;
$c->sock = socket_accept($this->Master);
if $buffer == ‘~H#C~’ $c->atime=time()
$Connection[] = $c;
then
while($true){
$time = time();
foreach ($Connection as $c)
{
if ($c->atime + 20 sock);}
}
}
Connection.class.php
class Connection
{
public $sock;
public $atime = time();
}
알아볼 수 있겠지, 될지 안 될지 내일 테스트하러 갈게...
gently
06/23/201009:58
안정적이고 믿을 수 있도록 이 부하 희생은 필수적이다.phpsocket은 현재 장난감급 수준에 속한다. 나는 그것을 테스트에만 사용한다(BTW: 실제로 우리의 실제 생산에서도 phpsocket을 서버로 사용하고 C를 결합했기 때문에 phpsocket 범주에 완전히 속하지 않는다).위조 코드의 뜻을 이해하다.p>