Intel Edisonで iotkit-commを使うその2:ServerとClientについて.
前回のiotki-commチュートリアルの "4.もっと詳しいことを学ぶ" の続きです.
もっと詳しいことを学ぶその1. server(Service)の書き方
iotkit-commのチュートリアルその1,Clientについて
以下の3つのステップでService(Server)を作成する
- Service Specificationを記述する
- 1で決めたSpecificationにもとづいてServiceを作成する
- Serviceを実行する
以下でその例について述べる ※以下で示すサンプルコードは,/usr/share/iotkit-comm/examples/node/basic-client-serverに配置されています.
1. Service Specificationを記述する
Service SpecificationはJSONとして記述する.このJSONには,Serivceが動作するポート,Serviceの名前,通信時に利用するプロトコルといったAttributesを記述する.ここでは例として,以下の “server-spec.json”を記述してみる.
{ “name”: “/ndg/temperature/cpuTemp”, “type:”: { “name”:”zmqreqrep”, “protocol”: “tcp” }, “port”: 8333, “properties”: {“dataType”: “float”, “unit”: “F”}, “advertise”: {“locally”: true, “cloud”: false} }
2. 1で決めたSpecificationにもとづいてServiceを作成する
例として以下のServiceを作成する(server.js)
var iotkit-comm = require(‘iotkit-comm’); var path = require(‘path’); var spec = new iotkit.ServiceSpec(path.join(__dirname, “server-spec.son”); iotkit.createService(spec, function(service){ service.comm.setReceivedMessageHandler(function(client, msg, context){ cnosole.log(“received from client: “ + msg.toString()); service.comm.sendTo(client, “hi”); }); });
※Serviceでは,どのような内容のメッセージかのみを記述するため,そのメッセージが届くかどうかは気にする必要がありません. type.nameフィールドでの記述があれば,iotkit-commはどのようにメッセージを送信すればよいかを判断することができます.(今回の例でいうと”zmqreqrep”) ※ zmqreqrep: ZeroMQ is a high-performance asynchronous messaging library
通信の詳細は,通信プラグインによって処理されます.今回の例で言うと,通信プラグイン(service.comm)は, zmqreqrepプラグインのインスタンスです.通信プラグインの詳細は後述しますが,ここでは,通信プラグインは send や,sendTo といったファンクションを提供すると考えてください.
様々な通信プラグイン間の主な違いは,send や, sendTo といったファンクションのコールによって何が起こるかである(例えば,パケットフォーマットやヘッダが異なる).標準でいくつかの通信プラグインがiotkit-commにバンドルされているが,必要に応じて独自の通信プラグインを書くことも簡単にできる.
3. Serviceを実行する
これまでに記述した server-spec.json と, server.js を同じディレクトリに置き,以下のコマンドを実行すればServiceが起動します
node server.js
もっと詳しいことを学ぶその2. client の書き方
iotkit-commのチュートリアルその2,Clientについて
以下の3つのステップでClientを作成する
- Service queryを記述する
- ServiceのためのQueryにもとづいてClientを作成する
- Clientを実行する
以下でその例について述べる ※以下で示すサンプルコードは,/usr/share/iotkit-comm/examples/node/basic-client-serverに配置されています.
1. Service queryを記述する
Service QueryはJSONとして記述する.このJSONには,Clientが接続したいServerのAttributesが記述されている.ここでは例として,以下の “server-query.json”を記述してみる.
{ "name": "/ndg/temperature/cpuTemp", "type": { "name": "zmqreqrep", "protocol": "tcp" }, "properties": {"dataType": "float", "unit": "F"} }
2. ServiceのためのQueryにもとづいてClientを作成する
例として以下のclientを作成する(client.js)
var iotkit = require('iotkit-comm'); var path = require('path'); var query = new iotkit.ServiceQuery(path.join(__dirname, "server-query.json")); iotkit.createClient(query, function (client) { client.comm.setReceivedMessageHandler(function (message, context) { console.log("received from server: " + message.toString()); client.comm.send("hello"); }); client.comm.send("hello"); });
※ ServiceのIPアドレスや,Serviceとの通信方法をClientが知っている必要はありません.代わりに,Service queryがそのような詳細について管理してくれます.例えば,ClientではServiceの名前とServiceが利用するプロトコル(この場合zmqreqrep)を記述します.Serviceが見つかると,iotkit-commは適切に初期化された通信ハンドル(client.comm)をClientオブジェクトとともに返します.このハンドルは,Serviceに接続されたzmqreqrepプラグインのインスタンスです.
通信プラグインの詳細は後述しますが,ここでは,通信プラグインは send や,sendTo といったファンクションを提供すると考えてください.
様々な通信プラグイン間の主な違いは,send や, sendTo といったファンクションのコールによって何が起こるかである(例えば,パケットフォーマットやヘッダが異なる).標準でいくつかの通信プラグインがiotkit-commにバンドルされているが,必要に応じて独自の通信プラグインを書くことも簡単にできる.
3. Clientを実行する
これまでに記述した server-query.json と, client.js を同じディレクトリに置き,以下のコマンドを実行すればClientが起動します
node server.js
動作確認
Tutorial: Server で作成したServerと,このセクションで作成したClientを起動させると,以下のような実行結果が得られます.