Этот проект демонстрирует простой HTML-чат с использованием WebRTC, запрограммированный на Rust и скомпилированный в WASM. Живая демо-версия
Прочитав этот замечательный пост команды Cheerp, я захотел посмотреть, можно ли сделать то же самое с «чистым» Rust с помощью WASM.
Поскольку создание игры с нуля было слишком сложным в качестве первого шага, я решил просто поиграться с Rust, HTML (используя Yew) и WebRTC, создав приложение для чата. 3D и WebGL придут в другой раз.
Оказывается, заставить что-то работать не очень сложно, как вы можете видеть ниже:
Если вы попытаетесь запустить локально, лучше протестируйте локально с помощью Chrome, поскольку у меня возникли проблемы с Firefox. Также будьте осторожны: некоторые расширения могут блокировать соединения WebRTC. Кроме того, если вы тестируете с другом, это может не сработать, поскольку я использую только STUN-сервер. В результате проведенных мной тестов я выяснил, что в корпоративных сетях соединения часто блокируются, и использование TURN-сервера могло бы решить проблему. Но в отличие от STUN-сервера бесплатных серверов TURN не существует. Наконец, обработка ошибок еще не полностью завершена, поскольку я не знаю, как на самом деле обрабатывать ошибки (а также, что позволяет мне делать WebRTC API). Если вы застряли, перезагрузите страницу с обеих сторон и повторите попытку.
Для создания этого проекта вам необходимо:
cargo install wasm-pack
cargo install http-server
Чтобы запустить его после сборки, вам нужно ввести
wasm-pack build --target web --no-typescript --out-dir ./static/pkg
static
каталоге с помощью http-server -p 8080
(в качестве альтернативы вы можете использовать любой статический файловый сервер, например python3 -m http.server
).