Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/pedrolaraburu/sockets-bun
Trabalho Arquitetura de Sistemas Distribuídos
https://github.com/pedrolaraburu/sockets-bun
bun distributed-systems mermaidjs sockets
Last synced: about 1 month ago
JSON representation
Trabalho Arquitetura de Sistemas Distribuídos
- Host: GitHub
- URL: https://github.com/pedrolaraburu/sockets-bun
- Owner: pedrolaraburu
- Created: 2024-11-29T00:43:06.000Z (about 1 month ago)
- Default Branch: main
- Last Pushed: 2024-11-29T03:34:48.000Z (about 1 month ago)
- Last Synced: 2024-11-29T04:26:16.576Z (about 1 month ago)
- Topics: bun, distributed-systems, mermaidjs, sockets
- Language: TypeScript
- Homepage:
- Size: 52.7 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# **Trabalho Arquitetura de Sistemas Distribuídos**
## **Tema:**
**Construção de uma Aplicação com Componentes Distribuídos – Troca de Mensagens**---
## **Descrição do Projeto**
Este projeto consiste na construção de uma aplicação distribuída para troca de mensagens entre múltiplos clientes, conectados a um servidor central. A ideia principal é implementar um sistema no qual:
- **Clientes**: Podem se conectar ao servidor, enviar mensagens e receber mensagens de outros clientes conectados.
- **Servidor**: Atua como coordenador central, gerenciando conexões e retransmitindo as mensagens para todos os clientes conectados.A comunicação entre os componentes é baseada no **modelo cliente-servidor distribuído**, utilizando **sockets TCP**, o que garante uma conexão persistente e eficiente para a troca de mensagens em tempo real.
---
## **Diagrama**
O diagrama abaixo ilustra a interação entre os componentes do sistema (clientes e servidor). Ele foi gerado utilizando a sintaxe [Mermaid](https://mermaid.js.org/).```mermaid
graph TD
Server[Server: Coordenador Central]
Client1[Client 1]
Client2[Client 2]
Client3[Client 3]%% Connections
Client1 -->|Manda mensagem| Server
Client2 -->|Manda mensagem| Server
Client3 -->|Manda mensagem| ServerServer -->|Faz Broadcast da mensagem| Client1
Server -->|Faz Broadcast da mensagem| Client2
Server -->|Faz Broadcast da mensagem| Client3
```---
## **Setup Inicial**1. **Clone este projeto**:
- Execute o comando:
```bash
git clone https://github.com/pedrolaraburu/sockets-bun
```2. **Instale o Bun**:
- Siga o guia de instalação no site oficial do [Bun](https://bun.sh/docs/installation).3. **Instale as dependências do projeto**:
- Execute o comando:
```bash
bun install
```4. **Estrutura de Arquivos do Projeto**:
- `src/server.ts`: Código do servidor.
- `src/client.ts`: Código do cliente.
- `docs/`: Pasta que contém imagens e diagrama em Mermaid.---
## **Configuração do Sistema como um Sistema Distribuído**
### **1. Configurando o Servidor com ngrok**
1. **Instale o ngrok**:
- Siga o guia de instalação oficial do [ngrok](https://ngrok.com/docs/getting-started/).2. **Conecte sua conta ngrok**:
- Use o comando:
```bash
ngrok config add-authtoken
```3. **Inicie o servidor TCP**:
- Execute o servidor com:
```bash
bun run ./src/server.ts
```4. **Exponha o servidor para a internet**:
- Inicie o ngrok para o servidor:
```bash
ngrok tcp localhost:3000
```
- O ngrok fornecerá um endereço público (hostname e porta) que permite que clientes na internet se conectem ao servidor.**OBSERVAÇÃO**
- Como estamos tentando "simular" um sistema distribuído, é bom que você se conecte através de outro computador.**Exemplo:**
- Hostname: `0.tcp.sa.ngrok.io`
- Port: `16598`Veja abaixo como o ngrok deve aparecer:
![Exemplo ngrok](./docs/ngrok.png)---
### **2. Configurando o Cliente**
1. Atualize o código do cliente (`client.ts`) com o hostname e a porta fornecidos pelo ngrok:
```javascript
const client = Bun.connect({
hostname: "0.tcp.sa.ngrok.io", // Endereço fornecido pelo ngrok
port: 16598 // Porta fornecida pelo ngrok
});
```2. Inicie o cliente:
```bash
bun run ./src/client.ts
```3. **Alternativa**: Você também pode usar o comando `telnet` para se conectar ao servidor diretamente pelo terminal:
```bash
telnet 0.tcp.sa.ngrok.io 16598
```---
## **Fluxo de Execução**
1. **Inicie o servidor**:
```bash
bun run ./src/server.ts
```2. **Exponha o servidor com o ngrok**:
```bash
ngrok tcp localhost:3000
```3. **Conecte clientes**:
- Atualize as configurações no cliente e execute:
```bash
bun run ./src/client.ts
```
- Ou use o comando `telnet` para testar a conexão.---
## **Demonstração**
- **Clientes Enviando Mensagens**:
- Cada cliente envia mensagens ao servidor.
- O servidor retransmite as mensagens para todos os outros clientes conectados.
- **Broadcast pelo Servidor**:
- As mensagens são replicadas em tempo real para todos os clientes.
- **[Vídeo demonstrativo](./docs/video-sockets.mp4)**
- O vídeo demonstra a visão do servidor, onde é possível visualizar todas as mensagens de todos os clientes passando.
- Os clientes também recebem as mensagens de outros clientes, visto que o servidor faz o broadcast dessa mensagem aos outros.
- *Os clientes que acessaram esse servidor se **conectaram por máquinas e redes diferentes***.---
Your browser does not support the video tag.