Um sistema de chat realtime com upload de imagens, baseado em:
- ✅ Frontend Angular [Chat realtime] (Socket.IO + Upload com Presigned URL)
- ✅ Backend Node.js (WebSocket + REST + AWS SDK)
- ✅ AWS SQS (mensageria FIFO)
- ✅ AWS DynamoDB (histórico de mensagens)
- ✅ AWS S3 (upload de imagens)
- ✅ AWS EC2 (deploy backend)
- ✅ S3 Hosting (deploy frontend)
- Envio de mensagens de texto e imagem em tempo real
- Persistência de mensagens no DynamoDB
- Upload de arquivos direto do navegador para o S3
- WebSocket para transmissão imediata via Socket.IO
- Histórico visível ao carregar o chat
[Frontend Angular]
|
| 1. Conexão WebSocket (Socket.IO)
| 2. HTTP: /history (GET)
| 3. HTTP: /upload-url?filename=xyz.png (GET)
|
[Backend Node.js + Express + Socket.IO]
|
| 4. Recebe mensagens via WebSocket
| 5. Envia para SQS + salva no DynamoDB
| 6. Gera Presigned URL para uploads
| 7. Periodicamente lê da SQS e emite para todos os sockets
|
[AWS]
├── SQS (chat.fifo)
├── DynamoDB
└── S3
- Usuário envia uma mensagem →
socket.emit('sendMessage', msg)
- Backend:
- Enfileira no SQS
- Salva no DynamoDB
- Daemon do backend lê do SQS e faz
io.emit('newMessage', msg)
- Todas as abas/clientes recebem instantaneamente
- Usuário seleciona imagem → Angular solicita
GET /upload-url
- Backend gera uma Presigned URL para o S3
- Angular faz
PUT
diretamente no S3 usando a URL - Angular envia mensagem no formato:
[img]https://...s3.amazonaws.com/...
- Backend trata como mensagem normal, SQS + DynamoDB
- Frontend exibe como
<img>
ao detectar[img]
no começo
Projeto em produção rodando totalmente através dos recursos free tiers da amazon, integrando os serviços aqui citados. Deploy front no S3, e back no EC2.