kingkont 0.20.1 → 0.20.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/server.js +16 -3
package/package.json
CHANGED
package/server.js
CHANGED
|
@@ -623,7 +623,13 @@ async function serveStatic(res, url) {
|
|
|
623
623
|
// Router
|
|
624
624
|
// =============================================================================
|
|
625
625
|
|
|
626
|
-
|
|
626
|
+
// Главный request-handler. Выделен из createServer чтобы start() мог
|
|
627
|
+
// создавать СВЕЖИЙ server на каждый retry — раньше глобальный server
|
|
628
|
+
// шарился между attempt'ами, и при EADDRINUSE на Windows несколько
|
|
629
|
+
// pending listen() callbacks в итоге фаерились (когда порт освобождался)
|
|
630
|
+
// → wsHub.attach вызывался N раз → multiple WebSocketServer на одном
|
|
631
|
+
// upgrade event → "handleUpgrade called more than once" uncaughtException.
|
|
632
|
+
async function _requestHandler(req, res) {
|
|
627
633
|
const url = new URL(req.url, `http://${req.headers.host}`);
|
|
628
634
|
try {
|
|
629
635
|
if (req.method === 'POST' && url.pathname === '/api/generate') return handleGenerate(req, res);
|
|
@@ -686,7 +692,7 @@ const server = createServer(async (req, res) => {
|
|
|
686
692
|
console.error('[error]', e);
|
|
687
693
|
send(res, 500, { error: e.message || 'server error' });
|
|
688
694
|
}
|
|
689
|
-
}
|
|
695
|
+
}
|
|
690
696
|
|
|
691
697
|
process.on('unhandledRejection', (err) => console.error('[unhandledRejection]', err));
|
|
692
698
|
process.on('uncaughtException', (err) => console.error('[uncaughtException]', err));
|
|
@@ -702,9 +708,16 @@ function start(port = PORT, opts = {}) {
|
|
|
702
708
|
// jobsHub нужен settingsGetter чтобы поллить провайдеров (Chatium token,
|
|
703
709
|
// KIE_API_KEY и т.п.).
|
|
704
710
|
jobsHub.setSettingsGetter(getSettings);
|
|
711
|
+
// ВАЖНО: createServer на каждый retry. Раньше сервер был module-global
|
|
712
|
+
// и шарился, что приводило к multiple wsHub.attach при port-fallback'е
|
|
713
|
+
// (несколько pending listen() callbacks → multiple WebSocketServer на
|
|
714
|
+
// одном upgrade-event → uncaughtException на первом upgrade).
|
|
715
|
+
const server = createServer(_requestHandler);
|
|
705
716
|
return new Promise((resolveOk, reject) => {
|
|
706
|
-
server.
|
|
717
|
+
const onError = (err) => { server.removeAllListeners('listening'); reject(err); };
|
|
718
|
+
server.once('error', onError);
|
|
707
719
|
server.listen(port, () => {
|
|
720
|
+
server.removeListener('error', onError);
|
|
708
721
|
const addr = server.address();
|
|
709
722
|
// Attach WebSocket hub поверх того же HTTP-сервера (path /ws).
|
|
710
723
|
try { wsHub.attach(server); } catch (e) { console.warn('WS attach failed:', e.message); }
|