IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Optimisation d'accès [script long qui bloque tous les utilisateurs]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 274
    Par défaut Optimisation d'accès [script long qui bloque tous les utilisateurs]
    Bonjour à tous,

    Alors voilà, nous avons développé en interne une application Web pour la gestion de clients, planning, création de PDF etc....

    Mais voilà lorsqu'un utilisateur crée par exemple un fichier PDF (html2pdf), le temps de création peux être long en fonction des données qu'il faut aller chercher dans la base de données, seul hic, tous les autres utilisateurs de l'interface Web se retrouve bloqué le temps que le script termine la création du PDF.

    Actuellement sous windows server 2012 (toutes les mise à jours sont faites), avec un WampServer pour l'hébergement web du système client, etc...

    Dès lors comment permettre la création d'un PDF ou l'exécution d'un script assez lourd sans pour autant bloqué les autres utilisateurs.

    A première vue, voici ce que je me suis dit et j'aimerais votre avis.

    1) Première idée :
    Créer un serveur linux
    Installer un serveur Web multi hébergement (LAMP)
    1 utilisateur = 1 hébergement
    Mais le problème est que je vais me retrouvé avec une multitude de sites qui possèdes tous les même sources fichiers (ca me semble redondant et excessif) d'autant plus que tous utiliserons la même base de données.

    2) Seconde idée
    Créer un serveur linux
    Installer un serveur Web multi hébergement (LAMP)
    Tous les utilisateurs passent par la même interface (même hébergement)
    Toute demande de création pdf ou exécution de script lourd passe alors par autre user linux (autre hébergement uniquement pour ces pdf et script lourd), donc je suppose que lorsque je clic sur un boutons "créer pdf", je devrais lancer une autre instance php en arrière plan et qui ne gênerait alors pas les autres utilisateurs, via la commande exec ou quelques chose dans le genre (ce qui est compliqué sous windaube d'où l'installation d'un linux à la place)

    3) Vos avis ?
    Comment voyez-vous la choses ? en sachant que j'ai beaucoup de script étant assez long à traiter, mais qui évidemment empêche les autres de travailler durant l'exécution de ceux-ci.

    Je cherche donc une solution optimal pour que les scripts lourd ne bloque plus les autres utilisateurs.

    D'avance merci pour votre participation.
    Bien à vous
    Spliffer

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Le fait d'être sous windows ou linux n'a en théorie pas d'impact.

    Un script PHP qui bloque ne peux pas bloquer les autres utilisateurs. Pour la simple et bonne raison que chaque requête est indépendante.
    Pour faire simple , les threads du serveur web fork un process de php justement pour ne pas être coincer par un autre scripts.
    Il existe cependant un cas où le problème peux se poser , c'est si ton script qui prend du temps utilise des sessions et que tu ne libère pas la session rapidement.

    En gros ton script à un lock sur le fichier de session et tous les autres script qui voudrons l'utiliser seront bloquer tant que ce lock ne sera pas libéré. PHP fonctionne comme ça pour éviter les accès concurrent et les risque de corruption de la session.

    La solution à ce problème est d'appeler session_write_close() le plus tôt possible dans le script. Donc idéalement avant le début du process qui prend du temps.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 274
    Par défaut
    Effectivement, l'interface utilise les sessions

    session_start, etc....
    le problème est que si je fait un session_write_close()
    selon la doc : session_write_close — Écrit les données de session et ferme la session
    Si l'on ferme la session cela signifie t'il que l'utilisateur devra se ré-identifier ?
    Si il dois se ré-identifier à chaque fois qu'il créer un pdf par exemple, ça risque vite de partir en vrille, non ?

  4. #4
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Ca ferme la session , ca ne la détruit pas.
    Au prochain script qui l'utilisera , un session_start() relancera la session.

    Le session_write_close est implicitement fait dans tous tes script à la fin de leur execution.

    Tu ne peux juste plus modifier la session après l'appel à session_write_close. :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $_SESSION['foo'] = 'bar'; //OK
    session_write_close();
    $_SESSION['foo'] = 'foo'; // Ne sera pas enregistré
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 274
    Par défaut
    Merci pour cette précision, je viens de mettre en place cette ligne au début de mes script qui génère les pdf et/ou les gros scripts : "session_write_close()" et effectivement, ça passe beaucoup mieux et il n'y à plus de blocage.

    Encore merci à vous pour votre participation.

    Bonne journée
    Spliffer

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SH] Script : Supprimer tous les utilisateurs de mysql qui ne sont pas égaux à X
    Par dubichu dans le forum Shell et commandes POSIX
    Réponses: 4
    Dernier message: 24/05/2016, 10h01
  2. Réponses: 3
    Dernier message: 09/01/2016, 19h19
  3. script long qui bloque firefox
    Par Invité dans le forum Firefox
    Réponses: 1
    Dernier message: 20/06/2013, 13h59
  4. Script long qui bloque le navigateur
    Par ifrit 23 dans le forum Langage
    Réponses: 15
    Dernier message: 05/03/2010, 12h18
  5. Programme qui liste tous les accès à Internet
    Par snoopy69 dans le forum Sécurité
    Réponses: 3
    Dernier message: 31/08/2006, 13h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo