웹소켓 심장박동 패키지의 실현 방안

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개 태그:  





댓글 3개








    1. Sweet


      안녕하세요!코드 글꼴이 편해요. 어떤 글꼴인지 알려주시겠어요?zend studio 5.5.1을 사용합니다. 글의 코드 글꼴로 수정할 수 있습니까?감사합니다!p>






    2. yahveh


      어느새 부담을 가중시켰지, 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();
      }


      알아볼 수 있겠지, 될지 안 될지 내일 테스트하러 갈게...









      • 안정적이고 믿을 수 있도록 이 부하 희생은 필수적이다.phpsocket은 현재 장난감급 수준에 속한다. 나는 그것을 테스트에만 사용한다(BTW: 실제로 우리의 실제 생산에서도 phpsocket을 서버로 사용하고 C를 결합했기 때문에 phpsocket 범주에 완전히 속하지 않는다).위조 코드의 뜻을 이해하다.p>









좋은 웹페이지 즐겨찾기