見出し画像

Node For Max ② ~サーバーを立てて、HTTP リクエストを受け取る~

前回は、Max パッチがクライアントになって、API を実行するプログラムを作成しました。
今回は Node For Max を利用して、Express のサーバーを立ち上げてみようと思います。

ゴール

HTTP の POST リクエストを受け取り、URL ごとに異なる値を Max パッチに出力する。

成果物

コードの全量をこちらに公開しておきます。

Express とは

Express

Web アプリケーションとモバイル・アプリケーション向けの一連の機能を提供する Node.js Web アプリケーション・フレームワークです。
Node.js でサーバーを構築するための最低限の機能が備わっています。

初期構成はミニマルですが、Express 用のミドルウェアパッケージなど充実しているので、簡単な HTTP サーバーであれば Express で十分事足ります。
(慣れているので使いましたが、今回の用途にはオーバースペックですね......)

準備

必要なパッケージのインストール

$ npm i --save express
$ npm i --save-dev @types/express

開発

Express サーバー

3000 番のポートに Express のサーバーを立ち上げます。
POST メソッドで 2 つの API を用意しました。

  • POST /control/1

  • POST /control/2

const app = express();
const port = 3000;

app.post('/control/1', (_req: Request, res: Response) => {
    // node.script のアウトレットから 1 を出力
    MaxAPI.outlet(1);

    // クライアントにレスポンスを返却
    res.status(204);
    res.send();
});

app.post('/control/2', (_req: Request, res: Response) => {
    // node.script のアウトレットから 2 を出力
    MaxAPI.outlet(2);

    // クライアントにレスポンスを返却
    res.status(204);
    res.send();
});

// ボート番号3000をリッスンしてサーバー起動
app.listen(port, () => {
  console.log(`Example app listening on port ${port}`)
})

Max

node.script で index.ts を読み込ませます。
前回同様に、ts-node で起動させるので -r オプションを追加

実行される API によって、1 or 2 が出力されるので、どちらにリクエストされたかがわかるように bang を置きました。

うごかす

Terminal から CURL を利用して、control/1 と control/2 にそれぞれリクエストすると、狙った通りの出力が得られました。

おわりに

Node For Max でサーバーが立てられたので、外部システムから HTTP で Max をコントロールできそうです。
これまでは udpreceive で外部システムからのコントロールを行なっていましたが、HTTP であればクライアントの選択肢がこれまでより増えますね。
WEB アプリケーションや、なんならブラウザからでも Max に対して指示が出せます。

TCP プロトコルなので、データの信頼性と引き換えにオーバーヘッドが大きくなるのが難点でしょうか。
単純なコントロール目的なら、遅延はほとんど気になりません。というか、体感では全くわからないです。

センサーのデータを送り続けるような、速度重視ならば UDP / それ以外なら TCP(HTTP)でも良さそうです。

この記事が気に入ったらサポートをしてみませんか?