2013-07-02 2 views
1

:연결 모니터링 내가 원하는 무엇

웹의 마지막 시간을 온라인과 아두 이노와 아파치 웹 서버와 쇼 "온라인"또는 "오프라인"사이에서 연결을 모니터링하려면 브라우저.

나는 그것을 할 방법 : HTTP POST를 사용하여 내 아두 이노가 하트 비트를 전송하는

heartbeat.php에 있습니다. heartbeat.php의 시작 부분에서 세션 변수를 설정하고 MySQL 데이터베이스에 현재 타임 스탬프를 저장 한 다음 index.php으로 리디렉션합니다.

heartbeat.php는

<?php 
    session_start(); 
    $_SESSION['hb'] = 1; 
    include("connect.php"); 
    $link=connection(); 
    $sql="UPDATE heartbeat SET time=NOW() WHERE 1"; 
    mysql_query($sql,$link); 
    header("Location: index.php"); 
?> 

의 index.php에서 자바 스크립트는 HTML 본문 내용으로 자동 새로 고침 및로드 healthcheck.php을 수행합니다. healthcheck.php에서

<script> 
    $(document).ready(function() { 
     var refreshId = setInterval(function() { 
      $("#content").load("healthcheck.php"); 
     }, 1000); 
     $.ajaxSetup({ cache: false }); 
    }); 
</script> 

스크립트는 시스템이 온라인 여부를 확인하는 세션 변수를 확인합니다. 시스템이 오프라인 인 경우 마지막 온라인 시간을 쿼리하고 브라우저에 표시합니다.

healthcheck.php

<?php 
session_start(); 
include("connect.php"); 

if(isset($_SESSION['hb'])) 
{ 
    echo '<h1>System Online!!!</h1>'; 
    unset($_SESSION['hb']); 
} 
else 
{ 
    echo '<h1>System Offline!!!</h1>'; 
    $link=connection(); 
    $result=mysql_query("SELECT * FROM heartbeat", $link); 

    while($row=mysql_fetch_array($result)) 
    { 
     printf("Last Online: %s", $row["time"]); 
    }  
} 
?> 

문제 :

나는 그것이 "오프라인으로 변하기 전에, 나는"온라인 "을 볼 수 있습니다 내 PC의 브라우저를 사용하여 로컬 호스트/heartbeat.php를 찾아 "마지막 온라인 시간 표시와 함께, 이것은 내가 Arduino를 사용하여 달성하고자하는 것입니다.

그러나 Arduino로 스크립트를 테스트하면 항상 "오프라인"으로 표시되고 마지막 온라인 시간은 새로 고침 간격에 따라 업데이트됩니다.

나는이 변수가 arduino 자체에 설정되어 있기 때문에 내 PC의 브라우저가 "오프라인"을 표시하지 않으므로 틀렸다고 정정 해 주시기 바랍니다.

이 온라인 모니터링 기능을 효과적으로 구현하기위한 조언이나 제안을 찾고 있는데, 어떤 제안이라도 환영하며 높이 평가합니다.

+0

내가 틀렸다면 정정하되 세션 변수가 클라이언트별로 데이터를 저장하기 때문에 세션에 arduino에서 서버로 설정 한 세션 변수가 세션의 세션 변수와 다르다고 생각합니다. PC 웹 브라우저에서 서버로. –

+0

글쎄, ICMP/Ping을 arduino 호스트에 보내는 프로그램을 만들면 대답하지 않을 때 "오프라인"으로 식별해야하는 이유는 무엇입니까? 문제가 적고 Arduino에 또 다른 책임을 추가하지 않아도됩니다. – zmo

+0

@ til_b 네 말이 맞아요. 세션 변수의 개념이 이전에 잘못되어있어 막혔어. –

답변

1

"세션 ID"로 생각하는 것이 확실하지 않지만 API 키와 같이 웹 서비스를 향한 장치를 식별하는 데 더 많이 사용한다고 생각합니다. 세션 ID는 일반적으로 HTTP 요청의 쿠키에 삽입되는 토큰이며 관리 및 추적하기가 쉽지 않으므로 사용 케이스에 필요하지 않습니다. 그냥 POST 토큰, 그리고 $_POST 변수를 통해 그것을 얻을!

그리고 의견에서 제안한대로 ICMP/Ping을 Arduino에 보내는 프로그램을 만들면 왜 대답하지 않을 때 "오프라인"으로 식별 할 수 있습니까?

문제가 적어서 Arduino에 다른 책임을 추가하지 않아도됩니다.

+0

arduino를 핑 (ping)하면 해결책이 될 수 있지만 내 서버가 언제든지 발생할 수있는 또 다른 신호를 듣고 있기 때문에 항상 대기해야합니다. 내 서버가 arduino를 ping하는 동안 신호가 들어올 때 트래픽/연결에 영향을 미칠 것입니다. 또한 1 arduino뿐만 아니라 모니터해야합니다. –

+0

정말 당신의 의견을 이해하지 못했습니다 ... 미안합니다 ... 너는 두번 번역 된 구글처럼?! – zmo

+0

아니요, Google 번역을 사용하지 않았습니다. 즉 내 서버는 여러 arduino 클라이언트에 연결됩니다. 그들 각각은 언제든지 트리거 신호를 보낼 수 있으므로 모든 arduino 클라이언트에 대해 ping을 서버에 요청하면 네트워크 트래픽이 영향을받을 것으로 판단됩니다. 제말을 알아 들으시겠습니까?? –

관련 문제