Add heartbeat
This commit is contained in:
@@ -633,6 +633,20 @@ function runServer() {
|
|||||||
transport.onclose = () => {
|
transport.onclose = () => {
|
||||||
sseTransportsBySessionId.delete(transport.sessionId);
|
sseTransportsBySessionId.delete(transport.sessionId);
|
||||||
};
|
};
|
||||||
|
// SSE heartbeat to prevent client ReadTimeout during idle (e.g. while waiting for Ollama)
|
||||||
|
const heartbeatIntervalMs = 15_000;
|
||||||
|
const heartbeatInterval = setInterval(() => {
|
||||||
|
try {
|
||||||
|
if (!res.writableEnded) {
|
||||||
|
res.write(': heartbeat\n\n');
|
||||||
|
} else {
|
||||||
|
clearInterval(heartbeatInterval);
|
||||||
|
}
|
||||||
|
} catch {
|
||||||
|
clearInterval(heartbeatInterval);
|
||||||
|
}
|
||||||
|
}, heartbeatIntervalMs);
|
||||||
|
res.on('close', () => clearInterval(heartbeatInterval));
|
||||||
await server.connect(transport);
|
await server.connect(transport);
|
||||||
console.error("Secure MCP Filesystem Server: new SSE client connected");
|
console.error("Secure MCP Filesystem Server: new SSE client connected");
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
|||||||
@@ -483,6 +483,18 @@ function runServer() {
|
|||||||
transport.onclose = () => {
|
transport.onclose = () => {
|
||||||
sseTransportsBySessionId.delete(transport.sessionId);
|
sseTransportsBySessionId.delete(transport.sessionId);
|
||||||
};
|
};
|
||||||
|
const heartbeatInterval = setInterval(() => {
|
||||||
|
try {
|
||||||
|
if (!res.writableEnded) {
|
||||||
|
res.write(': heartbeat\n\n');
|
||||||
|
} else {
|
||||||
|
clearInterval(heartbeatInterval);
|
||||||
|
}
|
||||||
|
} catch {
|
||||||
|
clearInterval(heartbeatInterval);
|
||||||
|
}
|
||||||
|
}, 15_000);
|
||||||
|
res.on('close', () => clearInterval(heartbeatInterval));
|
||||||
await server.connect(transport);
|
await server.connect(transport);
|
||||||
console.error("Knowledge Graph MCP Server: new SSE client connected");
|
console.error("Knowledge Graph MCP Server: new SSE client connected");
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
|||||||
@@ -123,6 +123,18 @@ function runServer() {
|
|||||||
transport.onclose = () => {
|
transport.onclose = () => {
|
||||||
sseTransportsBySessionId.delete(transport.sessionId);
|
sseTransportsBySessionId.delete(transport.sessionId);
|
||||||
};
|
};
|
||||||
|
const heartbeatInterval = setInterval(() => {
|
||||||
|
try {
|
||||||
|
if (!res.writableEnded) {
|
||||||
|
res.write(': heartbeat\n\n');
|
||||||
|
} else {
|
||||||
|
clearInterval(heartbeatInterval);
|
||||||
|
}
|
||||||
|
} catch {
|
||||||
|
clearInterval(heartbeatInterval);
|
||||||
|
}
|
||||||
|
}, 15_000);
|
||||||
|
res.on('close', () => clearInterval(heartbeatInterval));
|
||||||
await server.connect(transport);
|
await server.connect(transport);
|
||||||
console.error("Sequential Thinking MCP Server: new SSE client connected");
|
console.error("Sequential Thinking MCP Server: new SSE client connected");
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
|||||||
Reference in New Issue
Block a user