ブラウザ経由で制御しているロボットがあります。進む、戻るなどのボタンを含むページは、オンボード コンピューターでホストされている PHP で記述されています。PHP は、シリアル接続を介して ASCII 文字をマイクロコントローラに送信しているだけです。とにかく、運転している人が切断されたときにロボットが停止するように、フェイルセーフを実装する必要があります。私が考えられる唯一のことは、Web ページまたは何かでその人に ping を送信することですが、それよりも良い方法があると確信しています。ロボットは、アドホック ネットワークまたはインターネットに接続されている通常のワイヤレス ネットワークを介して接続されます。明らかに、ping メソッドを使用すると、実際に切断されてから切断されたことに気付くまでに遅延が必要になります。使用する方法が何であれ、この遅延をできるだけ小さくしたいと思います。私'
3 に答える
クライアントのIPが変更される可能性があることを考慮する必要があるため、Webクライアントへのpingはやや信頼できません。
一方、Ajax を介して「デッドマン ボタン」をエミュレートすることもできます。Web ページが定義済みのコマンドを時々 (おそらく 5 ~ 10 秒ごと) 送信するようにします。ロボットがメッセージをしばらく受信しない場合、ロボットは停止する可能性があります。Ajax スクリプトはバックグラウンドで実行できるため、制御しているユーザーは何も気付かないでしょう。
これはもちろん、ロボットには、毎秒インクリメントされ、メッセージを受信するとリセットされるカウンターが必要であることを意味します。タイマー変数が高くなりすぎた瞬間、FULL STOP
Web ブラウザーに埋め込まれた単純なフラッシュ オブジェクトを使用して、ロボットのサーバーへのソケット接続を開くことをお勧めしますか? サーバーは、任意の適切な言語で作成できます - PHP でさえ (せき)。
次に、接続が切断されたときにすぐに検出し、フェイルセーフ アプローチを実装するのは簡単なことです。
HTTP は、ロボット制御用の理想的なプロトコルではありません。
幸運を!
私が考えることができるのは、サーバーを X 秒ごとに「ping」する ajax コードを HTML に含めることだけです。それが、あなたがまだオンラインかどうかを知るために Facebook チャットが行っていることだと思います。
HTML 5 Web ソケットは、あなたが探しているソリューションかもしれませんが、ほとんどのユーザーのブラウザーでは実装されないことを考慮する必要があります。
この記事は興味深いかもしれません: http://www.infoq.com/news/2008/12/websockets-vs-comet-ajax。