Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

50021番ポートが空いていなければ、他の空いてるポートで起動してユーザーに通知する #1252

Closed
Hiroshiba opened this issue Mar 14, 2023 · 3 comments · Fixed by #1267
Labels
優先度:低 初心者歓迎タスク 初心者にも優しい簡単めなタスク 機能向上

Comments

@Hiroshiba
Copy link
Member

内容

50021番ポートが偶然使われていた場合、なぜかわからないけど起動しないという形になります。
もし前のプロセスがなぜか生き残ってるなどであればPC再起動で解決しますが、そうじゃない場合は現状詰みます。

エディタ側から塞がれているか検知し、そうであれば別ポートで起動するという手が使えそうです。
ただユーザーはポートが変わったことに気づけないので、ダイアログなどで変わった旨を伝える必要がありそうです。

Pros 良くなる点

偶然の不幸なユーザーを減らせる

Cons 悪くなる点

実現方法

その他

関連

@esperecyan
Copy link

50021番ポートは、Hyper-V/WSLが予約する50000〜50059と競合していることがわかったので、追記しておきます。

@Hiroshiba
Copy link
Member Author

0.15のリリースで実装されました 🎉

ポートが使用中だった場合、そのポート番号の+100番までインクリメントしながらサーチし、一番最初に開いていたポートを使用します。
もし開いていなかったらランダムなポートが利用されます。

// エンジン指定のポート + 100番までを探索 エフェメラルポートの範囲の最大は超えないようにする
const altPortMax = Math.min(basePort + 100, 65535);
for (let altPort = basePort + 1; altPort <= altPortMax; altPort++) {
portLog(basePort, `Trying whether port ${altPort} is assignable...`);
if (await isAssignablePort(altPort, hostname)) {
return altPort;
}
}
// 指定のポート + 100番まで見つからなかった場合ランダムなポートを使用する
portWarn(basePort, `No alternative port found! ${basePort}...${altPortMax}`);
const altPort = await findOrCheckPort(0, hostname);
if (altPort == undefined) {
portWarn(basePort, "No alternative port found!");
} else {
portLog(altPort, "Assignable");
}
return altPort;

この実装はこれからは仕様として扱おうと思います。
何か理由がない限りこの仕様を変えない、くらいの気持ちです。

@Hiroshiba
Copy link
Member Author

何かサードパーティにメッセージを送れないか検討するissueをたてました。

かなり簡単だと思う一方、ボイボ開発チームとしては後回しになりがちな内容なので、サードパーティ開発者の方でちょっと貢献してみたいという方がいらっしゃったら、ぜひ・・・!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
優先度:低 初心者歓迎タスク 初心者にも優しい簡単めなタスク 機能向上
Projects
None yet
2 participants