そのポートでサーバーを起動する以外に、Dart でポートを「ロック」することは可能ですか。つまり、ポートはセマフォとして機能していると思います。あるいは、同じ結果を達成する別の方法はありますか?
この問題の解決策を求める質問を投稿したところ、Fox32 は特定のポートでサーバーを起動し、プログラムの別のインスタンスが既に実行されているかどうかを判断することを提案しました。実際に実行中かどうかではなく、実際の処理を開始する最初のインスタンスを決定する必要があり、そのソリューションは機能します。
その解決策はうまく機能しますが、よりカスタマイズされた解決策が必要であるように私には思えます。コード例は次のとおりです。
/*
* Attempt to connect to specific port to determine if first process.
*/
async.Future<bool> fTestIfFirstInstance() {
async.Completer<bool> oCompleter = new async.Completer<bool>();
const String S_HOST = "127.0.0.1"; // ie: localhost
const int I_PORT = 8087;
HttpServer.bind(S_HOST, I_PORT).then((oHtServer) {
ogHtServer = oHtServer; // copy to global
oCompleter.complete(true); // this is the first process
return;
}).catchError((oError) {
oCompleter.complete(false); // this is NOT the first process
return;
});
return oCompleter.future;
}