{"id":"691679c5adcd0bfee0251ffb","title":"2025 11 02 Issue 63","path":"how-to/committee/release-notes/2025-11-02-issue-63","contentMarkdown":"# 2nd November 2025 — WebSocket Timeout Prevention [#63](https://github.com/nbarrett/ngx-ramblers/issues/63)\n## [build 340](https://github.com/nbarrett/ngx-ramblers/actions/runs/19011520890) — [Resolves #63](https://github.com/nbarrett/ngx-ramblers/issues/63) — [commit e65d887](https://github.com/nbarrett/ngx-ramblers/commit/e65d887)\n\nFixed WebSocket connections closing during large file uploads by configuring HTTP server and socket timeouts with TCP keep-alive.\n\n**Where to Find It**\n\n- **Gallery**: Large album uploads\n- **Image Management**: Batch image operations\n- **Any Long-Running Operation**: Using WebSocket progress tracking\n\n**Benefits**\n\n- **No Upload Timeouts**: WebSocket connections stay alive during large file uploads\n- **Extended Operations**: 10-minute HTTP timeout allows long-running image resize operations\n- **Reliable Progress**: Real-time progress tracking works throughout entire upload\n- **Better Keep-Alive**: TCP keep-alive with 30-second interval prevents connection drops\n- **Cleaner Error Handling**: Remove code 1006 from allowable status codes (indicates abnormal closure)\n\n**Technical Details**\n\nProblem:\n- Uploading large number of files caused WebSocket connections to close with error code 1006\n- Default 120-second timeout too short for image resize operations\n- Connections lost after ~2 minutes during batch uploads\n\nSolution:\n- Configure HTTP server with 10-minute timeout (was 120s default)\n- Set socket timeout to 0 (unlimited) and enable TCP keep-alive (30s interval)\n- Add clientTracking and disable perMessageDeflate on WebSocket server\n- Remove code 1006 from allowable status codes (abnormal closure indicator)\n- Existing ping/pong mechanism (10s client, 30s server) + timeout settings allow completion\n\nChanges:\n- HTTP server timeout: 600000ms (10 minutes)\n- Socket timeout: 0 (unlimited)\n- TCP keep-alive: enabled with 30-second interval\n- WebSocket server: clientTracking enabled, perMessageDeflate disabled","contentHtml":"<h1>2nd November 2025 — WebSocket Timeout Prevention <a href=\"https://github.com/nbarrett/ngx-ramblers/issues/63\">#63</a></h1>\n<h2><a href=\"https://github.com/nbarrett/ngx-ramblers/actions/runs/19011520890\">build 340</a> — <a href=\"https://github.com/nbarrett/ngx-ramblers/issues/63\">Resolves #63</a> — <a href=\"https://github.com/nbarrett/ngx-ramblers/commit/e65d887\">commit e65d887</a></h2>\n<p>Fixed WebSocket connections closing during large file uploads by configuring HTTP server and socket timeouts with TCP keep-alive.</p>\n<p><strong>Where to Find It</strong></p>\n<ul>\n<li><strong>Gallery</strong>: Large album uploads</li>\n<li><strong>Image Management</strong>: Batch image operations</li>\n<li><strong>Any Long-Running Operation</strong>: Using WebSocket progress tracking</li>\n</ul>\n<p><strong>Benefits</strong></p>\n<ul>\n<li><strong>No Upload Timeouts</strong>: WebSocket connections stay alive during large file uploads</li>\n<li><strong>Extended Operations</strong>: 10-minute HTTP timeout allows long-running image resize operations</li>\n<li><strong>Reliable Progress</strong>: Real-time progress tracking works throughout entire upload</li>\n<li><strong>Better Keep-Alive</strong>: TCP keep-alive with 30-second interval prevents connection drops</li>\n<li><strong>Cleaner Error Handling</strong>: Remove code 1006 from allowable status codes (indicates abnormal closure)</li>\n</ul>\n<p><strong>Technical Details</strong></p>\n<p>Problem:</p>\n<ul>\n<li>Uploading large number of files caused WebSocket connections to close with error code 1006</li>\n<li>Default 120-second timeout too short for image resize operations</li>\n<li>Connections lost after ~2 minutes during batch uploads</li>\n</ul>\n<p>Solution:</p>\n<ul>\n<li>Configure HTTP server with 10-minute timeout (was 120s default)</li>\n<li>Set socket timeout to 0 (unlimited) and enable TCP keep-alive (30s interval)</li>\n<li>Add clientTracking and disable perMessageDeflate on WebSocket server</li>\n<li>Remove code 1006 from allowable status codes (abnormal closure indicator)</li>\n<li>Existing ping/pong mechanism (10s client, 30s server) + timeout settings allow completion</li>\n</ul>\n<p>Changes:</p>\n<ul>\n<li>HTTP server timeout: 600000ms (10 minutes)</li>\n<li>Socket timeout: 0 (unlimited)</li>\n<li>TCP keep-alive: enabled with 30-second interval</li>\n<li>WebSocket server: clientTracking enabled, perMessageDeflate disabled</li>\n</ul>\n"}