![見出し画像](https://assets.st-note.com/production/uploads/images/111343228/rectangle_large_type_2_f3d163267d4d1c740366f5f403182f9e.png?width=1200)
Node For Max ② ~サーバーを立てて、HTTP リクエストを受け取る~
前回は、Max パッチがクライアントになって、API を実行するプログラムを作成しました。
今回は Node For Max を利用して、Express のサーバーを立ち上げてみようと思います。
ゴール
HTTP の POST リクエストを受け取り、URL ごとに異なる値を Max パッチに出力する。
成果物
コードの全量をこちらに公開しておきます。
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 にそれぞれリクエストすると、狙った通りの出力が得られました。
![](https://assets.st-note.com/production/uploads/images/111343090/picture_pc_861246424e4c2396a2b41b1b9fdd8cc7.gif?width=1200)
おわりに
Node For Max でサーバーが立てられたので、外部システムから HTTP で Max をコントロールできそうです。
これまでは udpreceive で外部システムからのコントロールを行なっていましたが、HTTP であればクライアントの選択肢がこれまでより増えますね。
WEB アプリケーションや、なんならブラウザからでも Max に対して指示が出せます。
TCP プロトコルなので、データの信頼性と引き換えにオーバーヘッドが大きくなるのが難点でしょうか。
単純なコントロール目的なら、遅延はほとんど気になりません。というか、体感では全くわからないです。
センサーのデータを送り続けるような、速度重視ならば UDP / それ以外なら TCP(HTTP)でも良さそうです。
この記事が気に入ったらサポートをしてみませんか?