Help us understand the problem. What is going on with this article?

【Node.js】udpで回線監視をするアプリケーション(udping)を作った話

More than 3 years have passed since last update.

SFC-RG Advent Calendar 2016の11日目です。

スクリーンショット 2016-12-12 2.04.04.png

概要

  • Node.jsで簡単な回線監視を行うアプリケーションを作った
  • コマンドラインツール,WEBアプリケーション,Node.jsモジュールの3つの使い方が出来るようにする
  • RaspberryPiなどのIoT機器で回線監視に用いることをを想定。
  • サーバー側・クライアント側の両方から、RTTの上昇や不通といった回線異常を検知できます。

GitHub
npm

構成

環境

  • Node.js v6.9.2 (v4以降なら動くはず)
  • Mac OS X 10.12.1
  • Ubuntu 16.04

Windowsは未確認です。大したことはやってないので大丈夫だとは思いますが、出来ないこともあるかもしれません。

シーケンス図

基本的な仕組みはこんな感じ。
udping_図.001.jpeg

使い方

プライベートIPを介する場合、必要に応じてポートフォワーディングを行ってください。

コマンドラインツールとして利用する

~/
npm install udping --global

グローバルオプションをつければ、udpingをそのままターミナルのコマンドとして使えます。

サーバー側

~/
udping -s

クライアント側

~/
udping [サーバー側のIPアドレス]

主なオプション

ping風です。

  • -s, --server
    サーバーモードで起動します。

  • -c, --client
    クライアントモードで起動します。

  • -t, --time
    実行時間(秒) デフォルトは無限です。

  • -i, --wait
    実行間隔(秒) デフォルトは1秒です。サーバー側は1.5秒

  • -f, --file
    ログデータを書き出すパスを指定できます。
    デフォルトは[実行ディレクトリ]/result_udping/

  • -h, --host
    サーバー側のIPアドレスです。
    通常はudping 192.168.1.1のように省略します。

  • -p, --port
    サーバー側のポート番号を指定します。デフォルトは55555。独自にで指定したい場合や他のプログラムとの競合がある場合のみ変更してください。

モジュールとして他のNode.jsアプリケーションから利用する

普通にnpmでインストールしてください。

~/
npm install --save udping

udpingクラスを呼び出すと使えます。
引数に環境設定用のオブジェクトを与えてください。
``node.js:yourApp.js
const Udping = require(
udping`);
const _env = {
//サーバーorクライアント クライアントが初期値。
//mode: "client",
mode: "server",

//サーバーのホストネーム IP 
host: "localhost",

port: 55555,
execTIme: new Date().getTime(),
savepath: `./result_udping/${Date.now()}_result.txt`,
//何ミリ秒おきに送るか。モードをサーバーにした場合は1.5倍
wait: 1000,
//タイムアウトやエラーが起きた時のcallback。初期設定はプリミティブ型のfalseを入れておく。
errCallback: false,
//成功時のcallback.初期設定はプリミティブ型のfalseを入れておく。
successCallback: false

}
const udpingServer = new Udping(_env);
```

WEBコンソールでRTTをチャートで可視化する(おまけ機能)

RTTを可視化させて楽しむ機能を作りました。

CLI版をインストールした状態で、

~/
udping-web

で起動します。適当なブラウザでlocalhost:3012を開いてください。

スクリーンショット 2016-12-12 2.04.04.png
こんな感じでヌルヌル動きます

参考文献

npm でコマンドラインツール開発事始め

yas-nyan
僕のようなアホの子にもわかるようなゆるふわな説明を心がけています
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした