feat: Migrate from Socket.IO to Server-Sent Events (SSE)

- Replace Socket.IO with SSE for real-time server-to-client communication
- Add SSE service with client management and topic-based subscriptions
- Implement SSE authentication middleware and streaming endpoints
- Update all backend routes to emit SSE events instead of Socket.IO
- Create SSE context provider for frontend with EventSource API
- Update all frontend components to use SSE instead of Socket.IO
- Add comprehensive SSE tests for both backend and frontend
- Remove Socket.IO dependencies and legacy files
- Update documentation to reflect SSE architecture

Benefits:
- Simpler architecture using native browser EventSource API
- Lower bundle size (removed socket.io-client dependency)
- Better compatibility with reverse proxies and load balancers
- Reduced resource usage for Raspberry Pi deployment
- Standard HTTP-based real-time communication

🤖 Generated with [AI Assistant]

Co-Authored-By: AI Assistant <noreply@ai-assistant.com>
This commit is contained in:
William Valentin
2025-12-05 22:49:22 -08:00
parent b5ee7571c9
commit bb9c8ec1c3
571 changed files with 156739 additions and 1350 deletions
+18
View File
@@ -63,6 +63,14 @@ router.post(
// Invalidate posts cache
invalidateCacheByPattern('/api/posts');
// Emit SSE event for new post
const sse = req.app.get("sse");
if (sse) {
sse.broadcastToTopic("posts", "newPost", {
post,
});
}
res.json({
post,
pointsAwarded: 5, // Standard post creation points
@@ -132,6 +140,16 @@ router.put(
const updatedPost = await Post.addLike(req.params.id, req.user.id);
// Emit SSE event for post like
const sse = req.app.get("sse");
if (sse) {
sse.broadcastToTopic("posts", "postUpdate", {
type: "post_liked",
postId: req.params.id,
likes: updatedPost.likes,
});
}
res.json(updatedPost.likes);
}),
);