kgersen tu comptes faire ce projet en opensource ?
Je cherchais justement une idée de projet concret pour mettre en pratique du rust (ça fait quelques mois que j'avance progressivement sur la doc), du-coup je souhaiterai contribuer au projet.
Pour le code client je suppose qu'il faudra développer un programme multiplateforme ? On peut aussi envisager tenter quelque chose en webassembly, il y a surement moyen de faire des tests de débit moins gourmand dans le navigateur avec cette techno.
oui surement open-source , c'est trop tot pour le langage toutefois et j’avoue que ma préférence va a Go plutôt qu'a Rust (je ne suis pas convaincu par Rust en l'état, y'a trop 'd'effet de mode' autour et un manque de recul. Les packages tiers manquent de maturité et de mise a l'épreuve).
J'ai fais des benchmarks et je continue a en faire avant de décider du langage.
L'important c'est surtout de trouver une bonne lib client http car le but n'est pas d'aller se taper l'écriture d'un client http (surtout avec http/2 et quic...). Go a une bon client HTTP de base (net/http) et une variante rapide (valyala/fasthttp), et Go a servit pour développer HTTP/2. Rust a reqwest et Hyper.rs et au pire y'a libcurl pour quasi tout les langages...c'est peut-être le mieux mais la portabilité est plus compliqué.
Webassembly n'apportera pas grand chose en terme de performance , js ou wasm c'est pareil pour ce cas d'usage. Le bottleneck c'est les limites du sandbox des navigateurs et comment ils implémentent les websockets (ou l'api fetch) car wasm n'a pas d'accès plus bas niveau que js. Franchement et ca fait un moment que je suis sur ce sujet je ne pense pas qu'on puisse fait mieux que ce que font les 'speedtest' web actuels donc ca ne sert pas a grand chose de vouloir utiliser un navigateur.
Du moins pour le code du test lui meme (aka le client http), par contre j'ai bien l'intention de faire une interface 'web' pour l'utilisateur non expert (c'est le défaut #1 des tests avec IPerf et curl). L'idée est de faire comme avec 'Electron' mais sans la lourdeur Electron: le programme n'a pas d'interface native mais expose une interface web accessible sur localhost (ou meme en réseau). Je n'ai toutefois pas encore décider quel framework web utilisé (d'autant que je déteste JS donc ca doit être du TS ou peut-être gopherjs). L'idéal sera un seul langage pour toute la stack...a ce niveau wasm peut peut-être jouer un role...
Je vais procéder par étape:
1. Client sans interface web, ligne de commande, multiplate-forme. L'équivalent de "curl" mais vers /dev/null par défaut (et optimiser pour ca) avec parallélisme et génération d'une résultat exportable (image ou graphe). Le client pourra mesurer le crosstalk, savoir quel type d'interface et type/debit (filiaire,wifi, 4g,) est utilisée , la charge cpu, etc bien plus qu'un navigateur donc. On peut meme embarquer
libupnp pour connaitre le crosstalk a la box du FAI...(vu que l'API des box c'est un sujet mort ou pas utilisable).
2. Interface web sur ce client pour les utilisateurs moins avertis. Ils téléchargent un 'exe' et le lance et ca ouvre leur navigateur sur 'localhost:1234' par exemple et une interface facon speedtest va controler le .exe pour faire des tests. L'interface doit permettre de proposer une liste de tests: download d'un fichier depuis testdebit.info par exemple, de plusieurs fichiers fichiers meme temps, etc. on peut meme envisager de concevoir des "groupes d'url" a proposer.
3. Le serveur dédié qui apportera des fonctionnalités supplémentaires (j'ai pas mal d'idées a ce sujet) notamment ce qu'on fait coté client (interface, crosstalk, cpu,etc). on peut envisager de mettre le client et le serveur dans le meme .exe par la suite pour faire des tests lan ou P2P entre 2 abonnés (moyennant l'ouverture des ports/IP qui va bien).