Skip to content

Uma implementação de chat em tempo real que utiliza WebSockets puros (sem bibliotecas externas como Socket.io) para comunicação instantânea

Notifications You must be signed in to change notification settings

patrickoliveira15/chat-node-websocket

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

About

Uma implementação de chat em tempo real que utiliza WebSockets puros (sem bibliotecas externas como Socket.io) para comunicação instantânea

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published