feat: 지서버 keep-alive 재도입 (1분 간격) — 폴링이 절전 방지 실효 확인됨
08-10에 만들었던 2분 간격 버전을 효과가 불확실하다며 지웠는데(그 시점엔 지서버 쪽에 사용자가 직접 건 30초 하트비트가 병행되고 있어 어느 쪽 효과인지 분리가 안 됐음), 오늘 실제 실험으로 인과관계가 확인됐다: 지서버 쪽 30초 폴링을 끄자 몇 분 안에 Windows가 실제로 절전 상태에 들어갔다(게이트가 "깨우는 중" HTML 반환, ARP FAILED, RDP·ping 전부 무응답 — 전부 실측 확인). 즉 주기적 폴링이 절전을 막는 효과 자체는 실재하고, 남은 건 그걸 지서버 쪽 별도 스크립트로 둘지 게이트웨이가 직접 할지의 문제였다. 사용자가 게이트웨이 쪽으로 다시 넣기로 결정 — 간격은 이전 2분보다 촘촘한 1분으로. 게이팅 로직은 이전과 동일: llm.provider === 'ollama_local'이고 WS 클라이언트가 최소 1개 연결돼 있을 때만(앱이 실제로 열려있고 지서버가 활성 모델일 때만) 직결 엔드포인트에 가벼운 요청을 보낸다. 게이트가 아니라 직결로만 보내므로 이미 잠들어 있으면 조용히 실패한다 — 깨우는 신호가 아니라 "깨어있는 동안 재우지 않는" 신호. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -107,6 +107,7 @@ import {
|
||||
import { getPaths } from '../config/paths';
|
||||
import { getVault, SecretValue } from '../security/vault';
|
||||
import { getOllamaClient } from '../agents/ollama-client';
|
||||
import { startOllamaLocalKeepAlive } from './ollama-local-keepalive';
|
||||
import { spawnAgent } from '../agents/spawner';
|
||||
import { getSession, addMessage, getHistory, getHistoryForApiCall, getWorkspace, setWorkspace, clearHistory, setContextTokens, cleanupSessions, cleanupEmptySessions, migrateGlobalSessionsToUser, listAllSessions, resolveNumCtx, activeOllamaEndpoint } from './session';
|
||||
import { hookBus } from './hooks/hooks';
|
||||
@@ -4731,6 +4732,8 @@ const wsPingInterval = setInterval(() => {
|
||||
});
|
||||
}, 30000);
|
||||
|
||||
const ollamaLocalKeepAliveInterval = startOllamaLocalKeepAlive(() => !!wss && wss.clients.size > 0);
|
||||
|
||||
server.on('error', (err: any) => {
|
||||
if (err?.code === 'EADDRINUSE') {
|
||||
console.error(`[Gateway] Port ${HOST}:${PORT} is already in use.`);
|
||||
|
||||
Reference in New Issue
Block a user