Félicitations! te voilà immédiatement promu "project owner" de HandBaller. C'étais pas dur de trouver ton profil.
"msgbus" a été ma première source d'inspiration (cf. credits sur la page projet). Mais j'avais alors besoin d'une solution fiable qui marche tout de suite pour ce sur quoi je travaillais. C'était il y a 3 ans et msgbus était encore en développement.
C'est alors que thttpd s'est rappelé à mes bons souvenirs. On le trouvait dans plein de distrib Linux embarqué et c'est lui qui faisait tourner le site des pages perso de mon FAI de l'époque.
J'avais déja jeté un coup d'oeil au code avant. Alors voila, ca m'a pris quoi... 1 jour, pour trouver où et quoi patcher pour transformer thttpd en un bus à messages.
Ca m'a pris un peu plus longtemps à mettre au point le flux de push. Mais finalement j'ai pu utiliser ce travail dans une maquette pour avoir un feedback temps-réel de tout ce qui se passait à l'extérieur d'un moteur de Firefox 3 en kiosque (via un XmlHttpRequest avec multipart=true). Succès total.
thttpd n'a pas libevent. Mais il dispose de sa propre logique de scruptation d'I/O qui semble tout à fait au fait de la technologie.
Au départ HandBaller ne fonctionnait qu'en multipart. Mais WebKit est monté en puissance, et j'ai bien vu qu'il fallait que je me mette au long polling. Ca tombait bien, thttpd embarque aussi une solution de timers et de pattern matching légère... alors j'ai décidé de tout refaire. L'architecture actuelle repose sur des micro boîtes à messages (une pour chaque agent) qui persistent quelques secondes entre 2 requêtes de long pooling ou lors d'une coupure d'une connection de push.
J'ai essayé de joindre les développeurs de msgbus en septembre sans succès. Je leur avais proposé de partager nos expériences. Et surtout je leur ai demandé de l'aide. J'arrive pas à faire marcher le multipart/x-mixed-replace comme il faut en HTTP/1.1 et le mode chuncked comme décrit dans la page projet de msgbus.
Voilà, voilà. Sinon, pour te décourager, voici les principaux défauts de HandBaller.
- le pattern matching qui sert à la souscription aux messages est trop souple, je suis obligé de passer en revue toutes les souscriptions pour voir si un message matche, sans pouvoir faire de haché... HandBaller n'est donc pas vraiment scalable, la complexité du reroutage d'un message étant en o(n).
- HandBaller ne supporte pas les connections keep-alive. Donc le long-pooling est coûteux. J'aimerais bien que Webkit se mette au multipart/x-mixed-replace ou à la balise HTML5 de "server side DOM event".
[^] # Re: HandBaller
Posté par Sylvain Garden . En réponse à la dépêche Nouvelle version de APE (Ajax Push Engine). Évalué à 3.
"msgbus" a été ma première source d'inspiration (cf. credits sur la page projet). Mais j'avais alors besoin d'une solution fiable qui marche tout de suite pour ce sur quoi je travaillais. C'était il y a 3 ans et msgbus était encore en développement.
C'est alors que thttpd s'est rappelé à mes bons souvenirs. On le trouvait dans plein de distrib Linux embarqué et c'est lui qui faisait tourner le site des pages perso de mon FAI de l'époque.
J'avais déja jeté un coup d'oeil au code avant. Alors voila, ca m'a pris quoi... 1 jour, pour trouver où et quoi patcher pour transformer thttpd en un bus à messages.
Ca m'a pris un peu plus longtemps à mettre au point le flux de push. Mais finalement j'ai pu utiliser ce travail dans une maquette pour avoir un feedback temps-réel de tout ce qui se passait à l'extérieur d'un moteur de Firefox 3 en kiosque (via un XmlHttpRequest avec multipart=true). Succès total.
thttpd n'a pas libevent. Mais il dispose de sa propre logique de scruptation d'I/O qui semble tout à fait au fait de la technologie.
Au départ HandBaller ne fonctionnait qu'en multipart. Mais WebKit est monté en puissance, et j'ai bien vu qu'il fallait que je me mette au long polling. Ca tombait bien, thttpd embarque aussi une solution de timers et de pattern matching légère... alors j'ai décidé de tout refaire. L'architecture actuelle repose sur des micro boîtes à messages (une pour chaque agent) qui persistent quelques secondes entre 2 requêtes de long pooling ou lors d'une coupure d'une connection de push.
J'ai essayé de joindre les développeurs de msgbus en septembre sans succès. Je leur avais proposé de partager nos expériences. Et surtout je leur ai demandé de l'aide. J'arrive pas à faire marcher le multipart/x-mixed-replace comme il faut en HTTP/1.1 et le mode chuncked comme décrit dans la page projet de msgbus.
Voilà, voilà. Sinon, pour te décourager, voici les principaux défauts de HandBaller.
- le pattern matching qui sert à la souscription aux messages est trop souple, je suis obligé de passer en revue toutes les souscriptions pour voir si un message matche, sans pouvoir faire de haché... HandBaller n'est donc pas vraiment scalable, la complexité du reroutage d'un message étant en o(n).
- HandBaller ne supporte pas les connections keep-alive. Donc le long-pooling est coûteux. J'aimerais bien que Webkit se mette au multipart/x-mixed-replace ou à la balise HTML5 de "server side DOM event".