Travaillé du 2021-12-26 au 2022-01-14

✨ Étoiles GitHub :4

🏷 Mots clés

🚦 Status

Terminé

Un simple serveur proxy Rust WebSocket utilisant Axum pour savoir quel chanson l’utilisateur spécifié écoute actuellement sur Spotify. La mise en cache du serveur est utilisée pour garder en mémoire la dernière chanson afin de ne pas surcharger l’API REST de Spotify.

Un watch channel de tokio est utilisé pour stocker la réponse de spotify et la retransmettre aux clients WebSocket nouvellement connecté.

Contexte

Je voulais afficher la chanson que j’écoute actuellement depuis Spotify sur mon portfolio et je voulais avoir un serveur proxy pour ne pas exposer mes informations d’identification Spotify et être limité dans mes tarifs au API de Spotify. J’ai décidé de rendre ce code public afin que je puisse plus facilement accéder au programme binaire sur n’importe quel serveur où je déploierais ceci.

Performance

Je l’ai fait exécuter sur mon serveur (1 Go de RAM + 1 cœur de CPU) et il ne prend pas beaucoup de ressources - en raison puisqu’il a été écrit en Rust. Il utilise en moyenne 1% de la mémoire (~10MB) et 2% du CPU. En outre, le binaire résultant (qui est construit dans GitHub Actions) est inférieur à 1MB.

Crates

Bien que je puisse probablement le rendre encore plus performant en utilisant moins de crates (bibliothèques/packages Rust), il est beaucoup plus facile de mettre quelque chose en place et de le faire fonctionner avec eux.

  • * clap est une crate très utile transformant une structure Rust en paramètres CLI, qui crée également la commande --help.
  • * axum aide à la gestion des WebSockets.
  • * serde désérialise JSON en structures Rust.
  • * reqwest un client HTTP simple, utilisé pour appeler l’API Spotify qui a aussi une bonne intégration avec serde.

🧑‍💻 Projets connexes

🗞 Code source

🛠 Technologies

Langues

Cadriciels