Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/levyks/rtc-mem-bench
https://github.com/levyks/rtc-mem-bench
Last synced: 8 days ago
JSON representation
- Host: GitHub
- URL: https://github.com/levyks/rtc-mem-bench
- Owner: Levyks
- Created: 2023-11-11T21:50:23.000Z (about 1 year ago)
- Default Branch: master
- Last Pushed: 2023-11-12T19:42:56.000Z (about 1 year ago)
- Last Synced: 2023-11-12T20:30:35.025Z (about 1 year ago)
- Language: TypeScript
- Size: 25.4 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Rinha de comunicação real-time
## Objetivo
Comparar a performance/facilidade de implementação de diversas linguagens/frameworks diferentes para comunicação real-time.
## Especificação
No ato na conexão, o cliente deverá informar os parâmetros `username` e `room`, que serão utilizados para identificar o usuário e a sala que ele deseja entrar.
Para implementações baseadas em websockets "puro", os parâmetros deverão ser passados na query string da URL de conexão.
```
ws://example.com/ws?username=foo&room=bar
```Para outros tipos de implementação, como Socket.IO ou Phoenix Channels, a maneira de passar os parâmetros pode variar, mas eles deverão ser passados no ato da conexão, ou, caso isso não seja possível, em uma mensagem enviada o mais rápido possível após a conexão ser estabelecida.
Em qualquer momento após a conexão, qualquer cliente pode enviar uma mensagem do tipo `sendMessage`, junto com uma string de texto como payload.
Para implementações baseadas em websockets "puro", a mensagem deverá ser enviada no formato JSON abaixo:
```json
{
"type": "sendMessage",
"payload": "Hello, world!"
}
```Para outros tipos de implementação, como Socket.IO ou Phoenix Channels, a maneira de enviar a mensagem pode variar, porém, o identificador `sendMessage` deverá estar presente.
A mensagem então será transmitida para todos os clientes conectados na mesma sala, incluindo o cliente que enviou a mensagem, essa mensagem deverá ter o identificador `message` e o payload deverá ser no formato JSON abaixo
```json
{
"username": "foo",
"message": "Hello, world!",
"timestamp": "2023-08-01T19:00:00Z"
}
```Exemplo completo em WS:
```json
{
"type": "message",
"payload": {
"username": "foo",
"message": "Hello, world!",
"timestamp": "2023-08-01T19:00:00Z"
}
}
```## Teste
Parâmetros:
- R: Número de salas
- C: Número de clientes por salaO teste consiste em:
- Serão conectados C clientes em uma mesma sala X, de forma paralela, após a conexão bem sucedida de todos os C clientes, um dos clientes será escolhido como "líder" e o loop de envio de mensagens terá início, que consiste em o líder enviar uma mensagem e aguardar que todos os C clientes a recebem, esse processo será repetido indefinidamente e sem delay.
- Esse processo será repetido de forma sequencial até que todas as R salas tenham sido criadas e seus loops de envio de mensagens tenham sido iniciados.
### Métricas
- Tempo médio de conexão para todos os clientes de uma sala.
- Tempo médio de envio de mensagem para todos os clientes de uma sala / iterações do loop por segundo.
- Caso o servidor não "aguente" todos os C\*R clientes conectados simultaneamente, também será considerado quantos clientes conseguiram se conectar antes do servidor "cair".### Limitações
A princípio, todos os servidores deverão ser testados em um container Docker com um limite de 512mb de RAM