2011年9月4日日曜日

RtmpClientをつかったJmeterのRtmpSamplerつくりました。

つくっていたRtmpSampler、とりあえず0.1αということにしました。
githubのソースはこちら。

いくつか問題があるので、まずは既知の問題について
・FlashMediaServerにはたぶんつなげない。(Red5のRtmpClientの問題)
・サンプリングツールなのに、大量接続をつくるとjmeterがへばる。(へばらないぎりぎりの線をみつけてください。)(Red5のRtmpClientの問題)
・jmeterがへばるとサーバー(Red5しか試したことないけど)へばる。(テスト後はサーバーを再起動しておくこと。)(Red5のRtmpClientの問題)
・複数のサーバーに接続するテストを実行するとどうなるかわからない。(コネクション情報がおかしくなる?)(Jmeterに対する僕の勉強不足と思われ)

では、リスクについて話したので、自己責任で利用してもらうことにします。
使い方。
1:jmeterのlib/extの部分に必要なjarファイルをぶち込みます。(readme.markdown参照)
2:jmeterを普通に起動します。基本的なJmeterの使い方はこちら
3:適当なスレッドグループを作成して、ConnectConfig、ConnectSampler、DisconnectSampler、InvokeSampler、OnInvokeSamplerを適当に配置する。
4:あとは適当に実行してどのくらいの動作速度がでているか確認する。

では、各部の簡単な説明を・・・
■RtmpConnectConfig接続するときの情報部
variableNameはほかのSamplerがこの接続情報を参照するときに利用するキーワードになります。
rtmpUrlはrtmpでの接続時のURL情報
swfUrlとpageUrlはswfプレーヤーがサーバーに報告する自分のいるページ情報となります。

■RtmpConnectSampler接続を実行するサンプラー
variableNameはConfigで設定した値をいれてください。
timeOutは動作タイムアウトの値ミリ秒で設定します。この図の場合では4秒以内に動作が完了できなかったらタイムアウトとしています。
perThreadの部分は、試行スレッドごとにRtmpClientを作成するかどうかの指定です。
falseにした場合は、1つのクライアントを全体で共有することになります。

なお、接続が確立しているスレッドでこのサンプラーを実行すると、試行をおこないません。

■RtmpDisconnectSampler切断を実行するサンプラー
variableNameはほかと同じ
timeOutもConnectと同じです。
切断を実行します。

■RtmpInvokeSamplerサーバー関数を呼び出すサンプラー
variableNameとtimeOutはほかと同じなので省略
invokeFuncは呼び出す関数名指定
下のテーブルの部分には、関数に渡す引数を指定します。
追加ボタンで追加(追加すると、空白の部分に新たな定義が挿入できるようになります。)
理論的にはいくつでも追加することができます。
また、ほかのサンプラーに後処理の正規表現抽出をいれておくと、ほかの動作で取得したデータをパラメーターに含めることが可能になります。
簡単に解説すると、取得する対象出力をBody(unescaped)を選択
参照に利用する名前を設置(仮にcallResultにします。)
正規表現を追加
$n$をテンプレートを設定$0$でPerlでいうところの$0になります。1つ目の一致結果を利用するには$1$・・・いった形になります。
ほかの場所で利用するには${callResult}という形で記入しておきます。
■RtmpOnInvokeSamplerサーバーからの応答を取得するサンプラー
variableNameとtimeOutはいつものです。
methodNameはサーバーから呼び出されることを期待する値です。
なお、このサンプラーにくる前に取得してしまった場合は別のメモリーにデータをキャッシュしていてそっちのデータがすぐにかえってきます。

実行するとこんな感じになります。

最後に大切なことなのでもう一度書いておきますが、まだ不具合がありますので、実行するなら自己責任でおねがいします。


7 件のコメント:

  1. お、なんかほめられた。うれしいな。

    また、javaいじくろう

    返信削除
  2. Hi,

    We tried using the sampler for our tests. How does this samplers actually undergo streaming?
    Can you please elaborate on the 'oninvoke' and 'invoke' functions.

    Thanks,
    Vipul

    返信削除
  3. こんにちは、

    我々はテストのため、これを使用してみました。これはどのように実際にストリーミングを受けるのでしょうか?
    あなたは、"登録したスクリプトが実行'と'の呼び出し"の機能に手の込んだしてくださいすることができます。

    我々は、基本的な比較を行うためのサーバのログをチェック。

    おかげで、
    Vipul

    返信削除
  4. hmm... give me a while to post the article to use rtmp sampler...

    返信削除
  5. for now we managed to do our test with flazr...thank you to you again.....

    返信削除
  6. ok. have a good flazr life :-)

    返信削除