Multiplataforma
Tecnologias e Ferramentas
- Node.js - Servidor orientado a eventos com entrada e saída de dados não-blocantes
- Express - O mais famoso e utilizado framework de aplicações Web para Node.js
- WebSocket - Protocolo para conexão TCP provendo canais de comunicação em tempo real full-duplex
- Socket.io - Biblioteca de abstração WebSocket cross-browser
- MongoDB - O mais popular e importante banco de dados NoSQL
- WebRTC - Protocolo para conexão em tempo real entre browsers
- Git - Sistema de controle de versão
Tecnologias e Ferramentas
UltStyle.js - Guia de princípios de desenvolvimento e estilo de código largamente baseada no conceituado Idiomatic.js
AngularJS - Framework JavaScript MVW super-heroico
UI Bootstrap - Componentes do reconhecido framework Bootstrap escritos em puro AngularJS.
jQuery - Biblioteca JavaScript 9001 utilidades
Sass - O mais maduro, estável e poderoso pré-processador CSS
ECMAScript 6 - A próxima versão da especificação da linguagem JavaScript
Traceur - Compilador de ES.next para JS atual
Gulp/Grunt - automatizador de tarefas (task runner)
Fluxo de dados
Multiplayer Online
- Delay de conexão (lag)
- Sincronização
- Frame rate
- Cheats
Servidor autoritativo e clientes burros
Efeito dos delays de rede (lag)
Previsão client-side
A representação responde imediatamente à interação do usuário.
O jogador do cliente está sempre no presente, outros jogadores estão no passado.
A previsão client-side deve nunca alterar o estado do jogo.
Problemas de sincronização
Desencontro do estado previsto e estado autoritativo
Reconciliação com o servidor
Problema de desencontro de estados resolvido
Compensação de lag
Eventos sensitivos à latência precisam de compensação de lag:
- Cliente envia timestamps juntamente com cada input
- Servidor autoritativamente reconstrói o estado do jogo para a dada timestamp
- Servidor processa a input e envia atualização para os clientes
Frame rate
Usando deltatime para manter clientes em sincronia mesmo com frame rates diferentes.
Cheats
O servidor sendo a única entidade autoritativa, é possível validar entrada de dados mitigando problemas de cheats.
No entanto, é impossível prevenir completamente toda e qualquer forma de cheat, logo este não é um foco do projeto ao longo de seu desenvolvimento.
Conclusão
Fazer um jogo online é fácil.
Fazer um jogo online bem feito é difícil.