Photon 0.2, le projet avance !

Posté par  . Édité par Nÿco, Yves Bourguignon, Benoît, Benoît Sibaud et Nils Ratusznik. Modéré par claudex. Licence CC By‑SA.
Étiquettes :
16
26
avr.
2013
PHP

J'ai le plaisir d'annoncer la sortie de la version 0.2 de Photon. Photon est un micro Framework, écrit en PHP, pour la réalisation de site web ou d'application web.

Principe de fonctionnement

Mongrel2 est un serveur web, écrit en C, qui prend en charge plusieurs protocoles côté client : HTTP + Long Polling, Flash sockets, WebSockets. La principale particularité est de ne pas avoir d'interface CGI, mais une interface basée sur la bibliothèque de communication ØMQ. Les requêtes HTTP des clients sont publiées sur cette interface, puis traitées de manière asynchrone par des processus applicatifs qui peuvent être écrits dans n'importe quel langage.

Photon est un serveur d'application écrit en PHP qui traite les requêtes issues de Mongrel2. Photon traite une seule requête HTTP à la fois, comme les applications CGI. Toutefois, il est possible de lancer plusieurs instances de photon pour traiter plusieurs requêtes en même temps, le nombre d'instances de Photon peut être changé a chaud afin de répondre a une montée de trafic. De plus, les instances de Photon n'ont pas besoin d'être exécutées sur le même serveur que Mongrel2, grâce à l'utilisation de la librairie ØMQ, Mongrel2 devient un « load balancer ».

Photon étant un micro Framework, la taille du code source reste modeste et la lecture de celui-ci reste aisée.

Fonctionnalités principales de Photon

  • Les vues
    • Les vues sont des méthodes de classe, votre application doit déclarer une table de routage (RegExp -> Vue)
    • Précondition, pour la gestion des droits d'accès principalement
    • Envoi de la réponse via un itérateur, pour l'envoi de grosse réponse avec une utilisation minime de RAM.
    • Réponse pour les codes HTTP courants hors 200 : 302, 303, 304, 403, 404, 405, 500
    • Post traitement, il est possible de sauvegarder du travail à faire après l'envoi de la réponse
  • Vue développeur pour l'analyse des erreurs 500
    • Nom et position dans le code de l'exception
    • Pile d'appel
    • Contenu de la requête
  • Middleware
    • Gzip
    • Cross Site Request Forgery
    • Cookie & Session
    • Authentification
  • Cookie et session
    • Les cookies sont signés
    • Le gestionnaire de session n’impose pas le backend de stockage
  • Moteur de formulaire
    • Génération de code HTML à partir d'un objet Form
    • Validation du formulaire via les contraintes décrites dans les champs d'entrée (Taille des chaînes, bornes des nombres, etc.)
  • Moteur de template simple, mais efficace et extensible par l'intermédiaire de :
    • filtre sur les variables (modifier)
    • générateur de code HTML (tag)
  • Support linguistique avec gettext :
    • Générateur de fichier POT
    • Fonction de traduction dans le code PHP et dans le moteur de template à partir des fichiers PO
  • Un gestionnaire d'événements
  • Les tâches (worker)
    • Permet le traitement différé des requêtes dans un autre processus.
    • Permet de mettre a disposition des ressources matérielles pour toutes les instances de Photon (Modem GSM-SMS, Périphérique USB, connexion modbus, etc.)
    • Les tâches peuvent envoyer la réponse à Mongrel2 sans re-passer par l'instance de Photon qui a émit la requête initiale.
  • E-Mail, wrapper vers PEAR_Mail
    • Auto-configuration depuis le fichier de configuration unifié de Photon
  • PHPUnit
    • Photon est presque intégralement (>95%) testé avec PHPUnit
    • Photon génère le bootstrap et le fichier de configuration PHPUnit pour votre projet afin de le tester facilement

Photon sur ARM

L'ensemble des logiciels nécessaires à Photon (Mongrel2, ØMQ, PHP) se cross-compile très facilement sous ARM. Il est donc possible de l'utiliser sur des plateformes telles que Overo de Gumstix.

Aller plus loin

  • # zerogw

    Posté par  . Évalué à 5.

    Perso j'utilise zerogw qui me parait plus simple à utiliser que mongrel2, il suffit de configurer un simple fichier zerogw.yaml pour configurer ses routes HTTP -> zeromq. il peut aussi forwarder des fichiers posté en HTTP vers mon API zeromq.

  • # Le nom est probablement mal choisi ...

    Posté par  . Évalué à 2. Dernière modification le 26 avril 2013 à 14:47.

    Il est déjà utilisé et c'est ce qui m'a traversé l'esprit quand j'ai lu le titre de la dépèche

    Il faudrait penser à le changer pour éviter les problèmes …

    • [^] # Re: Le nom est probablement mal choisi ...

      Posté par  (site web personnel) . Évalué à 2.

      Quoi ? le mot photon est déjà utilisé ? Naaaan !

      ;-)

      • [^] # Re: Le nom est probablement mal choisi ...

        Posté par  . Évalué à 2.

        Là on va plus loin que la simple utilisation d'un nom : il y a un autre produit qui porte ce nom dans un domaine assez proche depuis déjà assez longtemps , et ce serait se chercher des ennuis inutiles que de s'obstiner dans cette voie. En tout cas chacun fait ce qu'il veut mais je n'irai pas pleurer si les devs de Photon (celui dont parle la news) se prennent un procès et le perdent.

        • [^] # Re: Le nom est probablement mal choisi ...

          Posté par  (site web personnel) . Évalué à 3.

          Se prendre un procès pour quelle raison ? Parce que les deux ont utilisé un nom commun ?
          Le nom est-il déposé ? Il y a des (r) qui trainent quelque part (sachant que (tm) n'a quasiment aucune valeur) ?
          Et bon, c'est pas pareil non plus. D'un côté un framework web, de l'autre une GUI.

          Au fait, quelqu'un utilise du qnx / photon (pour de vrai et de nos jours) ?

    • [^] # Re: Le nom est probablement mal choisi ...

      Posté par  . Évalué à 4.

      Il faudrait penser à le changer pour éviter les problèmes …

      Encore pire, merci la méthode globale : j'avais lu en premier "Phonon" (Qt) et je ne voyais pas le rapport avec PHP…

  • # Dommage !

    Posté par  (site web personnel, Mastodon) . Évalué à 4.

    Réponse pour les codes HTTP courants hors 200 : 302, 303, 304, 403, 404, 405, 500

    C'est tout de même dommage que le code 200 ne soit pas pris en compte…

  • # en vrai, pour faire quoi ?

    Posté par  . Évalué à 1.

    Les tâches (worker)

    Permet de mettre a disposition des ressources matérielles pour toutes les instances de Photon (Modem GSM-SMS, Périphérique USB, connexion modbus, etc.)

    Photon sur ARM

    Par curiosité dans quel cadre vous utilisez du gsm avec un mvc php ?

    Sinon,

    At the core Photon is a PHP application server. That is, your code is loaded once at the start and then never again until the next restart. This makes Photon fast without the need of APC.

    Il y à 3 jours je lisais un article qui prônait la mort de php, notamment parce qu'il leak en tout sens.
    Vous avez pris l'exact contre-pied de cette assertion.

    Alors ça leak ou pas ?

    • [^] # Re: en vrai, pour faire quoi ?

      Posté par  . Évalué à 2.

    • [^] # Re: en vrai, pour faire quoi ?

      Posté par  (site web personnel, Mastodon) . Évalué à 2.

      notamment parce qu'il leak en tout sens.

      PHP ne leak plus depuis bien longtemps.

      Dans de vieilles versions (4.x, et probablement 5.0, 5.1), PHP avait des problèmes de fuites mémoires. Mais ça a été corrigé depuis longtemps à priori.

      Maintenant, si un script PHP leak, cela peut aussi être de la faute du script en lui même qui créé des objets ayant des dépendances circulaires par exemple, et qui ne sont pas déréférencé correctement par le développeur.

      Il y a même depuis la version 5.3 des fonctions pour forcer le garbage collector.

      Quant à la possible mort de PHP, ça me fait doucement rigoler…

    • [^] # Re: en vrai, pour faire quoi ?

      Posté par  . Évalué à 1.

      Avec les workers tu peut:
      - Lancer un calcul en Matlab, R, ou tout langage qui te permet de faire des calculs/simulations.
      - Mettre a disposition de toutes tes instances de photon, un ressource partagée (par exemple un labjack accepte uniquement 1 seul connection TCP à la fois)
      - Garder des connexion ouverte, genre Apache MPM worker
      - Bind une IP/PORT pour un groupe de serveur (Gateway pour des réseaux de capteurs), la on s'écarte un peu des utilisation classique MVC.

      Pour le GSM, par exemple l'envoie de SMS est très courante dans le monde de l’électronique embarquée. Les modems les moins chères ont une seule liaison série, il font donc la partagée.

      • [^] # Re: en vrai, pour faire quoi ?

        Posté par  . Évalué à 0.

        En tout cas je compte bien lui donner un banc d'essai à ce serveur. J'espère bientôt ! Si c'est concluant je repasserais très probablement.

  • # Mongrel2

    Posté par  (site web personnel) . Évalué à 0.

    Merci pour la découverte de Mongrel2
    Cependant je vois qu'il y a pas d'activités récentes sur le dépot de mongrel2, est ce que le projet est toujours maintenu ?

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.