Sobre
Conheça o desenvolvedor por trás do RoomStream
Linguagens Mais Usadas
Sobre o RoomStream
O RoomStream é um projeto de API WebSocket em tempo real, desenvolvido para demonstrar competências em arquitetura de sistemas distribuídos e comunicação real-time.
Construído com NestJS, Socket.IO e Redis, o projeto implementa um sistema completo de gerenciamento de salas com autenticação, eventos customizados e persistência opcional.
Stack Tecnológico
Aplicações
Gerencie suas API Keys para integração
Carregando aplicações...
Nenhuma aplicação cadastrada
Crie sua primeira aplicação para obter uma API Key
API Key
Excluir Aplicação?
Tem certeza que deseja excluir ? Esta ação não pode ser desfeita.
Regenerar API Key?
A API Key atual de será invalidada. Todas as integrações usando a chave antiga deixarão de funcionar.
Nenhuma sala selecionada
Selecione uma sala para começar a conversar
Mensagens
Nenhuma mensagem ainda
Seja o primeiro a enviar uma mensagem!
⚠️ Conecte-se ao WebSocket para enviar mensagens ⚠️ Entre em uma sala para enviar mensagens ✓ Pronto para enviar mensagens
Participantes
Nenhum participante online
Informações
Dashboard
Visão geral do sistema RoomStream
Conexões (Total)
Salas Criadas
Mensagens Enviadas
Tempo Ativo
Status do Sistema
WebSocket
Conexão em tempo real
REST API
Endpoints HTTP
Autenticação
Ações Rápidas
Salas Recentes
Nenhuma sala criada ainda
Guia de Integração
Conecte sua aplicação ao RoomStream WebSocket
Início Rápido
Antes de começar, crie uma aplicação em para obter sua APP Key.
1. Instalação
Instale o cliente Socket.IO no seu projeto:
npm install socket.io-client
yarn add socket.io-client
pnpm add socket.io-client
2. Configuração
/ws/rooms
import { io } from 'socket.io-client';
const socket = io(, {
auth: {
appKey: 'SUA_APP_KEY' // Obtida em Aplicações
},
transports: ['websocket', 'polling']
});
socket.on('connect', () => {
console.log('✅ Conectado!', socket.id);
});
socket.on('connect_error', (error) => {
console.error('❌ Erro de conexão:', error.message);
});
Substitua SUA_APP_KEY pela APP Key obtida em .
3. Métodos de Autenticação
{ auth: { appKey: 'app_xxx...' } }
{ extraHeaders: { 'x-app-key': 'app_xxx...' } }
'wss://servidor.com/ws/rooms?appKey=app_xxx...'
Eventos de Sala
| Evento | Direção | Descrição |
|---|---|---|
joinRoom |
Client → Server | Entrar em uma sala |
joinedRoom |
Server → Client | Confirmação de entrada na sala |
leaveRoom |
Client → Server | Sair de uma sala |
leftRoom |
Server → Client | Confirmação de saída da sala |
getRoomInfo |
Client → Server | Solicitar informações da sala |
roomInfo |
Server → Client | Dados da sala solicitada |
Eventos de Mensagem
| Evento | Direção | Descrição |
|---|---|---|
emit
recomendado
|
Client → Server | Emitir evento customizado para a sala |
sendMessage
alias
|
Client → Server | Alias para emit (evento: message) |
{event} |
Server → Broadcast | Evento customizado recebido (ex: message, notification) |
Sistema de Eventos Dinâmicos
O RoomStream permite emitir eventos com nomes customizados. O campo event define qual evento será disparado para os ouvintes.
- Default:
message - Exemplos:
notification,typing,reaction
Eventos de Participantes
| Evento | Direção | Descrição |
|---|---|---|
updateParticipantName |
Client → Server | Atualizar nome do participante |
participantJoined |
Server → Broadcast | Novo participante entrou na sala |
participantLeft |
Server → Broadcast | Participante saiu da sala |
participantNameUpdated |
Server → Broadcast | Nome de participante atualizado |
Estrutura dos Payloads
socket.emit('joinRoom', {
roomId: 'room_123456789',
participantName: 'Meu Nome' // opcional
});
socket.emit('emit', {
roomId: 'room_123456789',
message: 'Olá, mundo!',
event: 'message' // opcional, default: 'message'
});
socket.emit('emit', {
roomId: 'room_123456789',
message: 'Usuário está digitando...',
event: 'typing'
});
// Ouvir evento 'message' (default)
socket.on('message', (data) => {
console.log(`[${data.event}] ${data.message}`);
});
// Ouvir evento customizado 'typing'
socket.on('typing', (data) => {
console.log(`${data.clientId} está digitando...`);
});
Exemplo Completo (JavaScript)
import { io } from 'socket.io-client';
// Configuração
const APP_KEY = 'SUA_APP_KEY'; // Obtida em Aplicações
const SERVER_URL = ;
// Conectar
const socket = io(SERVER_URL, {
auth: { appKey: APP_KEY },
transports: ['websocket', 'polling']
});
// Eventos de conexão
socket.on('connect', () => {
console.log('✅ Conectado:', socket.id);
// Entrar em uma sala
socket.emit('joinRoom', {
roomId: 'room_123456789',
participantName: 'Usuário Demo'
});
});
socket.on('connect_error', (error) => {
console.error('❌ Erro:', error.message);
});
// Eventos de sala
socket.on('joinedRoom', (data) => {
console.log('🚪 Entrou na sala:', data.room.name);
console.log('👥 Participantes:', data.participants);
console.log('💬 Mensagens recentes:', data.recentMessages);
});
// Eventos de mensagem (ouve o evento definido, default: 'message')
socket.on('message', (data) => {
console.log(`[${data.event}]: ${data.message}`);
});
// Eventos de participantes
socket.on('participantJoined', (data) => {
console.log(`➡️ ${data.participantName} entrou`);
});
socket.on('participantLeft', (data) => {
console.log(`⬅️ ${data.participantName} saiu`);
});
// Enviar mensagem (evento customizável)
function sendMessage(roomId, message, event = 'message') {
socket.emit('emit', { roomId, message, event });
}
// Sair da sala
function leaveRoom(roomId) {
socket.emit('leaveRoom', { roomId });
}
React Hook
import { useEffect, useState, useCallback } from 'react';
import { io, Socket } from 'socket.io-client';
export function useRoomStream(appKey: string, serverUrl: string) {
const [socket, setSocket] = useState<Socket | null>(null);
const [isConnected, setIsConnected] = useState(false);
const [messages, setMessages] = useState<any[]>([]);
useEffect(() => {
const newSocket = io(serverUrl, {
auth: { appKey },
transports: ['websocket', 'polling']
});
newSocket.on('connect', () => setIsConnected(true));
newSocket.on('disconnect', () => setIsConnected(false));
newSocket.on('message', (data) => {
setMessages((prev) => [...prev, data]);
});
setSocket(newSocket);
return () => { newSocket.close(); };
}, [appKey, serverUrl]);
return { socket, isConnected, messages, joinRoom, sendMessage };
}
Erros Comuns
❌ "Authentication failed" ou "Invalid APP Key"
A APP Key fornecida é inválida ou a aplicação está desativada.
Solução: Verifique se a APP Key está correta em e se a aplicação está ativa.
❌ "Connection timeout" ou "CORS error"
O servidor não está acessível ou há bloqueio de CORS.
Solução: Verifique se a URL do servidor está correta e se o CORS está configurado para aceitar sua origem.
❌ "Room not found"
A sala especificada não existe.
Solução: Crie a sala primeiro via API REST ou verifique o roomId.
❌ Conexão desconecta frequentemente
Problemas de rede ou timeout de inatividade.
Solução: Implemente reconexão automática e adicione handlers de erro.
Debug
Ative o debug do Socket.IO para ver logs detalhados:
localStorage.setItem('debug', 'socket.io-client:*');
Recarregue a página após executar este comando.
FAQ
Bem-vindo ao
RoomStream
Faça login para acessar a plataforma de chat em tempo real
Bem-vindo ao RoomStream
Faça login para acessar a plataforma
Perfil Supabase
Informações autenticadas pelo Supabase
ℹ️ Nome derivado automaticamente do Supabase (não editável)
Perfil API Key
Informações editáveis
🔒 Salva localmente no navegador
Informações de Conexão
Salas
Gerencie e entre nas salas de chat
Carregando salas...
Nenhuma sala disponível
Crie a primeira sala para começar!