Skip to content

Latest commit

 

History

History
162 lines (120 loc) · 5.3 KB

File metadata and controls

162 lines (120 loc) · 5.3 KB

Aplicação de Chat com WebSockets

Uma aplicação de chat em tempo real desenvolvida com WebSockets puros em Node.js, sem dependência de bibliotecas externas para comunicação em tempo real.

📋 Visão Geral

Este projeto implementa uma aplicação de chat onde usuários podem criar salas de bate-papo ou entrar em salas existentes. A comunicação acontece em tempo real através de WebSockets, permitindo troca de mensagens instantâneas entre os participantes.

🌟 Características

  • Implementação pura de WebSockets sem bibliotecas como Socket.io
  • Criação e entrada em salas de chat
  • Persistência de mensagens usando SQLite
  • Interface responsiva e amigável
  • Arquitetura MVC bem estruturada
  • Reconexão automática em caso de queda da conexão
  • Notificações de entrada e saída de usuários

🚀 Tecnologias Utilizadas

  • Backend:

    • Node.js (JavaScript puro)
    • HTTP nativo do Node.js para servidor web
    • WebSockets implementados manualmente
    • SQLite para persistência de dados
  • Frontend:

    • HTML5
    • CSS3
    • JavaScript Vanilla (sem frameworks)
    • WebSockets API do navegador

🔧 Instalação

  1. Clone o repositório:

    git clone <url-do-repositorio>
    cd chat-node-websocket
  2. Instale as dependências:

    npm install
  3. Inicie o servidor:

    npm start
  4. Para desenvolvimento com recarga automática:

    npm run dev
  5. Acesse a aplicação em seu navegador:

    http://localhost:8080
    

📂 Estrutura do Projeto

├── database.sqlite          # Banco de dados SQLite
├── index.js                 # Ponto de entrada da aplicação
├── package.json             # Configurações do projeto
├── public/                  # Arquivos estáticos
│   ├── css/                 # Estilos CSS
│   │   └── style.css        # Estilos da aplicação
│   └── js/                  # JavaScript do cliente
│       ├── chat.js          # Lógica da página de chat
│       └── home.js          # Lógica da página inicial
├── src/                     # Código-fonte principal
│   ├── controllers/         # Controladores da aplicação
│   │   ├── HttpController.js    # Controlador de requisições HTTP
│   │   └── WebSocketController.js # Controlador de conexões WebSocket
│   ├── models/              # Modelos de dados
│   │   └── Room.js          # Modelo para salas e mensagens
│   ├── routes/              # Rotas da aplicação
│   │   └── httpRoutes.js    # Definição de rotas HTTP
│   ├── services/            # Camada de serviços
│   │   ├── HttpService.js   # Serviços para requisições HTTP
│   │   ├── RoomService.js   # Serviços para gerenciamento de salas
│   │   └── WebSocketService.js # Serviços para comunicação WebSocket
│   └── views/               # Templates HTML
│       ├── chat.html        # Página de chat
│       └── index.html       # Página inicial

💻 Funcionalidades

Página Inicial

  • Opção para criar uma nova sala de chat
  • Opção para entrar em uma sala existente
  • Listagem de todas as salas disponíveis

Página de Chat

  • Visualização de mensagens em tempo real
  • Envio de novas mensagens
  • Lista de usuários ativos na sala
  • Indicador de status de conexão
  • Botão para sair da sala

🛠️ Arquitetura

O projeto segue uma arquitetura em camadas do tipo MVC (Model-View-Controller):

  • Models: Gerenciam a persistência e recuperação de dados no SQLite
  • Views: Templates HTML que renderizam a interface do usuário
  • Controllers: Coordenam o fluxo de dados entre o modelo e a visualização
  • Services: Implementam a lógica de negócio e operações específicas
  • Routes: Definem o roteamento de requisições HTTP

Implementação de WebSockets

O projeto implementa o protocolo WebSocket do zero, incluindo:

  • Handshake conforme RFC 6455
  • Codificação e decodificação de quadros WebSocket
  • Gerenciamento de conexões de clientes
  • Transmissão de mensagens para clientes específicos ou para salas

📊 Fluxo de Dados

  1. Cliente conecta ao servidor via WebSocket
  2. Cliente envia mensagem para criar ou entrar em uma sala
  3. Servidor processa a solicitação e armazena/recupera dados do banco
  4. Servidor envia confirmação e histórico de mensagens para o cliente
  5. Mensagens enviadas são transmitidas em tempo real para todos na sala
  6. Eventos de entrada/saída de usuários são notificados à sala

📝 Licença

Este projeto está licenciado sob a licença ISC.

🤝 Contribuição

Contribuições são bem-vindas! Para contribuir:

  1. Faça um fork do projeto
  2. Crie uma branch para sua feature (git checkout -b feature/nova-feature)
  3. Commit suas mudanças (git commit -m 'Adiciona nova feature')
  4. Push para a branch (git push origin feature/nova-feature)
  5. Abra um Pull Request

📚 Aprendizados

Este projeto demonstra conceitos avançados como:

  • Implementação manual do protocolo WebSocket
  • Arquitetura em camadas
  • Gerenciamento de estado em aplicações em tempo real
  • Persistência de dados com SQLite
  • Manipulação de eventos assíncronos
  • Tratamento de reconexões e recuperação de falhas