Tcpノードを使う(その3)
ここのところずっとNode-REDのサンプルを見ながら各ノードの使い方を確認しています。頭出しの記事はこちらをご確認ください。今回はTcpノードの最終回です。前々回の記事では、サーバからクライアントにメッセージを送信しました。前回の記事では、クライアントからサーバにメッセージを送信しました。今回は、クライアントからサーバにメッセージを送信し、そのコネクション上でサーバからクライアントにメッセージを返信します。普通のTCPクライアントとサーバのやり取りをまるっと実装します。
TCPクライアントとサーバ間でメッセージを送受信する
確認するサンプルは、「読み込み > サンプル > flows > node-red > network > tcp > 03 - Send reply to client of TCP connection」です。
上段はサーバに対してリクエストを送信後、サーバからのメッセージの返信を待ち受けるクライアントのフローです。グレーのTcp requestノードを確認すると、以下のように設定されています。
- サーバ:localhost
- ポート:1883
- 戻り値:指定文字の受信時 \n
Injectノードでは「Hello, World!\n」という文字列をpayloadに指定して送信しています。
- 種類:待ち受け
- ポート:1883
- 出力:ストリーム文字列のペイロード
- 区切り文字:\n
続いて、Changeノードを確認すると、msg.payloadの値を加工して、先頭に「Received: 」、末尾に改行コードを付加しています。
最後に、Tcp outノードは次のように設定されています。雰囲気的にmsg.payloadの内容をレスポンスとして返すんでしょうね。
- 種類:TCP応答
Injectノードを実行すると、デバッグパネルに「Received: Hello, World!\n」のログが出力されます。
- 上段のフローで「Hello, World!」のメッセージをサーバに送信する
- 下段のフローでサーバがメッセージを受信し、メッセージを加工してクライアントに返信する
- 上段のフローでサーバが返したメッセージをクライアントで受信してログ出力する
という流れです。
例によって、これでも一応動いてはいますが、Node−RED内で完結してしまっているのでTCPサーバが動いている実感が湧きません。そこで、TelnetクライアントでTCPサーバに接続してメッセージの送受信を行ってみます。
と、その前に、下段のTcp inノードの区切り文字設定を以下のように「\n」に変更しておきます。これはTelnetクライアントを動かすターミナルの改行コード設定と合わせるのが目的です。この設定が合っていないと、TelnetクライアントでEnterキーを押してもメッセージの送受信がうまく行われません。
この状態で、Telnetクライアントから「localhost 1883」に接続して適当な文字列(ここでは「fugo」)を入力してEnterキーを押下します。
$ telnet -a localhost 1883 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. fugo Received: fugo
サーバから「Received: fugo」と返信が返ってきましたね。
まとめ
ここまで確認したことを一旦まとめます。
- Tcp requestノードを利用するとメッセージの送信と返信の受信を行うTCPクライアントになります
- Tcp inノードで「待ち受け」て、Tcp outノードで「TCP応答」を設定すると、クライアントの接続を待ち受けて、何らかの処理後にメッセージを返信するTCPサーバになります
この仕組を拡張すればWebサーバ、SMTPサーバ、FTPサーバなど、TCPベースのサーバは何でも作れそうです(誰もやらないと思いますが)。ということで、以上TCPノードシリーズでした。
コメント
コメントを投稿