fix: increase web console capacity and add frontend retry

This commit is contained in:
zhayujie
2026-04-08 11:48:27 +08:00
parent 360e3670eb
commit cd31dd27fd
2 changed files with 43 additions and 20 deletions

View File

@@ -763,29 +763,46 @@ function sendMessage() {
})); }));
} }
fetch('/message', { const MAX_RETRIES = 2;
method: 'POST', const RETRY_DELAY_MS = 1000;
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(body) function postWithRetry(attempt) {
}) fetch('/message', {
.then(r => r.json()) method: 'POST',
.then(data => { headers: { 'Content-Type': 'application/json' },
if (data.status === 'success') { body: JSON.stringify(body)
if (data.stream) { })
startSSE(data.request_id, loadingEl, timestamp); .then(r => r.json())
.then(data => {
if (data.status === 'success') {
if (data.stream) {
startSSE(data.request_id, loadingEl, timestamp);
} else {
loadingContainers[data.request_id] = loadingEl;
if (!isPolling) startPolling();
}
} else { } else {
loadingContainers[data.request_id] = loadingEl; loadingEl.remove();
if (!isPolling) startPolling(); addBotMessage(t('error_send'), new Date());
}
})
.catch(err => {
if (err.name === 'AbortError') {
loadingEl.remove();
addBotMessage(t('error_timeout'), new Date());
return;
}
if (attempt < MAX_RETRIES) {
console.warn(`[sendMessage] attempt ${attempt + 1} failed, retrying...`, err);
setTimeout(() => postWithRetry(attempt + 1), RETRY_DELAY_MS * (attempt + 1));
return;
} }
} else {
loadingEl.remove(); loadingEl.remove();
addBotMessage(t('error_send'), new Date()); addBotMessage(t('error_send'), new Date());
} });
}) }
.catch(err => {
loadingEl.remove(); postWithRetry(0);
addBotMessage(err.name === 'AbortError' ? t('error_timeout') : t('error_send'), new Date());
});
} }
function startSSE(requestId, loadingEl, timestamp) { function startSSE(requestId, loadingEl, timestamp) {

View File

@@ -454,8 +454,14 @@ class WebChannel(ChatChannel):
func = web.httpserver.StaticMiddleware(app.wsgifunc()) func = web.httpserver.StaticMiddleware(app.wsgifunc())
func = web.httpserver.LogMiddleware(func) func = web.httpserver.LogMiddleware(func)
server = web.httpserver.WSGIServer(("0.0.0.0", port), func) server = web.httpserver.WSGIServer(("0.0.0.0", port), func)
# Allow concurrent requests by not blocking on in-flight handler threads
server.daemon_threads = True server.daemon_threads = True
# Default request_queue_size(5) / timeout(10s) / numthreads(10) are
# too small: when SSE streams occupy many threads, the backlog fills
# and new connections get refused (ERR_CONNECTION_ABORTED).
server.request_queue_size = 128
server.timeout = 300
server.requests.min = 20
server.requests.max = 80
self._http_server = server self._http_server = server
try: try:
server.start() server.start()