Este projeto apresenta um chat HTML simples usando WebRTC e programado em Rust e compilado em WASM. Demonstração ao vivo
Depois de ler este post maravilhoso da equipe Cheerp eu queria ver se o mesmo pode ser feito com Rust "puro" usando WASM.
Como fazer um jogo do zero era muito complicado, no primeiro passo, pretendi apenas brincar com Rust, HTML (usando Yew) e WebRTC fazendo um aplicativo de bate-papo. 3D e WebGL virão em outro momento.
Acontece que não é muito difícil fazer algo funcionar como você pode ver abaixo:
Se você tentar executar localmente, prefira testar com o Chrome localmente porque encontrei problemas com o Firefox. Além disso, tenha cuidado, pois algumas extensões podem bloquear conexões WebRTC. Além disso, se você estiver testando com um amigo, pode não funcionar, pois estou usando apenas um servidor STUN. Pelos testes que fiz, descobri que muitas vezes as conexões ficam bloqueadas em redes corporativas e usar um servidor TURN resolveria o problema. Mas, diferentemente do servidor STUN, não existem servidores TURN gratuitos. Por fim, o tratamento de erros ainda não está totalmente concluído, pois não sei como realmente trato os erros (e também o que a API WebRTC me permite fazer). Se você estiver travado, recarregue a página em ambos os lados e tente novamente.
Para construir este projeto você precisa:
cargo install wasm-pack
cargo install http-server
Para executá-lo uma vez compilado, você precisa digitar
wasm-pack build --target web --no-typescript --out-dir ./static/pkg
static
com http-server -p 8080
(alternativamente, você pode usar qualquer servidor de arquivos estático como python3 -m http.server
)