fwtozza dans d'autres langages
Le modèle n'est pas lié à JavaScript. Ce site en montre la déclinaison JS parce qu'elle tourne dans le navigateur sans rien installer ; mais tout ce qui compte est indépendant du langage.
Ce qui est du modèle
- Le message : une enveloppe à clé unique, un payload JSON dont chaque champ est déclaré. JSON est le dénominateur commun ; n'importe quel langage le lit et l'écrit.
- Le catalogue : de la pure donnée. Le vocabulaire fermé (
type,required,pattern,enum,default,fields,items,oneOf,upcastFrom) s'interprète dans n'importe quel langage en quelques centaines de lignes : c'est ce que faitengine.js. Un catalogue peut même être écrit en JSON et partagé entre un serveur Go et un client Swift. - Le broker : inscription atomique, validation à l'émission, forme canonique, FIFO à épuisement, copie privée, garde-fou anti-cycle, audit. Rien de tout cela n'est spécifique à JS.
- L'objet standard :
(broker, instanceName, deps),emits,receives,handleMessage,destroy. Une interface, dans le langage de votre choix. - Le canal et ses exigences : le handshake compare des schémas en forme canonique (clés triées), ce qu'un pair non-JS recalcule à l'identique ;
fingerprintOfest un FNV-1a sur cette forme, reproductible partout. - Les sessions,
connection_event,allowMessage: des conventions sur l'enveloppe et sur un objet de session.
Ce qui est de la déclinaison JavaScript
- Les modules ES sans build, et le fait que
public/fw/engine.jssoit la source unique importée par le serveur via un shim. structuredClonepour la copie privée ; un autre langage sérialise ou copie en profondeur.- Le transport WebSocket de référence avec
wscôté Node. jsdompour tester le rendu des composants client.
Mélanger les langages
Le cas typique : un serveur dans un autre langage (Python, Go, Java, PHP) face à des clients navigateur en JS. Il faut alors, côté serveur : un interpréteur du catalogue (validation, défauts, upcast), un broker, et la moitié serveur d'un canal qui parle le même protocole de handshake. Le catalogue de canal, lui, reste un seul document, chargé des deux côtés. Un client Unity ou Electron face à un serveur Node est le cas symétrique.
Si vous portez le modèle, la référence à respecter est fwtozza.md, et le test à passer est de rejouer les examples et counterexamples du catalogue du chat avec votre moteur, puis de raccorder votre canal au canal JS en face.