2021年6月5日土曜日

denoでhttp接続用portを自動選択する(修正版)

deno上で動作するデスクトップアプリを数種類作成して、必要に応じて起動させたり終了させたりしたい関係で、TCP接続に使えるポート番号を探すサンプルを先日作成しましたが、意図した通りの動作になっていませんでした。
具体的には、使用中のポート番号でのサーバ起動をトライしたタイミングでエラーが発生してしまうという状態でした。
上記の問題を解消したバージョンのサンプルが以下。



他のプロセスで使用されているポート番号でのサーバ起動をトライすると、以下のように表示されます。



「try」で囲んでいるため、エラーが発生した場合は「catch{ ~ }」が実行されると思っていましたが、そのようには動作しませんでした。



仕方がないので、以下のようにしました。
  1. netstatコマンドを使って使用中のポート番号のリストを得る。
  2. findコマンドを使って上記のリストから、任意のポート番号を含む行を抽出する。
  3. 上記を行うバッチファイルを作成する。
  4. Deno.runで上記バッチファイルを実行して、標準出力を解釈してポート番号が使用中か否かを判定する。
上記の3については、findコマンドのパラメータはダブルクォーテーションで囲む必要があるがdeno.Runではその記号を渡す際に\マークが入ってしまうので、やむを得ずそのような対応となりました。
上記赤字の問題については後日、別の投稿を作成します。



修正版のソースが以下。



修正版の実行結果。


49152~49153が使用中の状況で上記のサンプルを実行すると、以下のようになりますので、意図した通りの動作になっている事が確認できました。



うまくいくケースだけじゃなく、失敗する筈のケースも動作確認するべき…とは思っているのですが、忘れがちです…。反省。

0 件のコメント:

コメントを投稿