Mais ça fait tout freezer car du coup mon appli ne reçoit plus aucun
'signal'.
Est-il possible de faire des threads en PHP ?
Dois je m'y prendre autrement pour gérer mon socket ?
Est-il possible de faire des sockets asynchrones, et est ce que ça me
serait utile ?
Je viens d'installer PHPGTK et j'en test les possibilités. J'ai malgrés tout un petit problème c'est pourquoi je viens demander l'avis d'expert
Experts en php gtk je ne suis pas.
Je lance une boucle comme celle-ci pour gérer un socket :
while(! feof($IRCSock)) { $data = fread($IRCSock, 4096) ; echo $data ; } Mais ça fait tout freezer car du coup mon appli ne reçoit plus aucun 'signal'.
Est-il possible de faire des threads en PHP ?
Ta boucle tu la lances où ? Normalement, j'espere (remarque je ne connais pas phpgtk, mais je connais bien gtk) tu initialise ton interface, tes fonctions et tu lances ta boucle gtk::main(). À partir de ce moment là ton gestionaire gtk (ici php) se doit de gerer les thread, sinon comment veut-il envoyer les signaux qui vont bien ?
Il te faudra donc initialiser ta boucle de socket suite à un evenement quelquqonque (genre chargement de la fenetre qui existe 'realize' par exemple peu correspondre à ce que tu veux)
Dois je m'y prendre autrement pour gérer mon socket ?
Dans une fonction appelée par un evenement, pas dans le code principal avant le lancement de la boucle main()
Est-il possible de faire des sockets asynchrones, et est ce que ça me serait utile ?
Aucune idee.
De rien.
PS: Sans vouloir troller d'aucune façon, un autre language ne serait pas plus adapté pour le gtk que php ?
-- Guillaume.
lkm wrote:
Bonsoir,
Bonsoir
Je viens d'installer PHPGTK et j'en test les possibilités. J'ai malgrés
tout un petit problème c'est pourquoi je viens demander l'avis d'expert
Experts en php gtk je ne suis pas.
Je lance une boucle comme celle-ci pour gérer un socket :
while(! feof($IRCSock))
{
$data = fread($IRCSock, 4096) ;
echo $data ;
}
Mais ça fait tout freezer car du coup mon appli ne reçoit plus aucun
'signal'.
Est-il possible de faire des threads en PHP ?
Ta boucle tu la lances où ?
Normalement, j'espere (remarque je ne connais pas phpgtk, mais je
connais bien gtk) tu initialise ton interface, tes fonctions et tu
lances ta boucle gtk::main(). À partir de ce moment là ton gestionaire
gtk (ici php) se doit de gerer les thread, sinon comment veut-il envoyer
les signaux qui vont bien ?
Il te faudra donc initialiser ta boucle de socket suite à un evenement
quelquqonque (genre chargement de la fenetre qui existe 'realize' par
exemple peu correspondre à ce que tu veux)
Dois je m'y prendre autrement pour gérer mon socket ?
Dans une fonction appelée par un evenement, pas dans le code principal
avant le lancement de la boucle main()
Est-il possible de faire des sockets asynchrones, et est ce que ça me
serait utile ?
Aucune idee.
De rien.
PS: Sans vouloir troller d'aucune façon, un autre language ne serait pas
plus adapté pour le gtk que php ?
Je viens d'installer PHPGTK et j'en test les possibilités. J'ai malgrés tout un petit problème c'est pourquoi je viens demander l'avis d'expert
Experts en php gtk je ne suis pas.
Je lance une boucle comme celle-ci pour gérer un socket :
while(! feof($IRCSock)) { $data = fread($IRCSock, 4096) ; echo $data ; } Mais ça fait tout freezer car du coup mon appli ne reçoit plus aucun 'signal'.
Est-il possible de faire des threads en PHP ?
Ta boucle tu la lances où ? Normalement, j'espere (remarque je ne connais pas phpgtk, mais je connais bien gtk) tu initialise ton interface, tes fonctions et tu lances ta boucle gtk::main(). À partir de ce moment là ton gestionaire gtk (ici php) se doit de gerer les thread, sinon comment veut-il envoyer les signaux qui vont bien ?
Il te faudra donc initialiser ta boucle de socket suite à un evenement quelquqonque (genre chargement de la fenetre qui existe 'realize' par exemple peu correspondre à ce que tu veux)
Dois je m'y prendre autrement pour gérer mon socket ?
Dans une fonction appelée par un evenement, pas dans le code principal avant le lancement de la boucle main()
Est-il possible de faire des sockets asynchrones, et est ce que ça me serait utile ?
Aucune idee.
De rien.
PS: Sans vouloir troller d'aucune façon, un autre language ne serait pas plus adapté pour le gtk que php ?
-- Guillaume.
Marc
lkm wrote:
Est-il possible de faire des threads en PHP ?
non ! qui sait peut-etre en version 6.0.
Dois je m'y prendre autrement pour gérer mon socket ? Est-il possible de faire des sockets asynchrones, et est ce que ça me serait utile ?
regarde les fonctions socket_select(), stream_select(). C'est grace a cela que tu pourras realiser une lecture de flux sans etre bloqué.
* dans les commentaires de ces 2 pages, il y a des choses interessantes qui peuvent aider.
* c'est une tres bonne idée de developper en php-gtk (contrairement a ce que disent certains ....).
lkm wrote:
Est-il possible de faire des threads en PHP ?
non ! qui sait peut-etre en version 6.0.
Dois je m'y prendre autrement pour gérer mon socket ?
Est-il possible de faire des sockets asynchrones, et est ce que ça me
serait utile ?
regarde les fonctions socket_select(), stream_select(). C'est
grace a cela que tu pourras realiser une lecture de flux
sans etre bloqué.
* dans les commentaires de ces 2 pages, il y a des choses interessantes
qui peuvent aider.
* c'est une tres bonne idée de developper en php-gtk (contrairement
a ce que disent certains ....).
Mais ça fait tout freezer car du coup mon appli ne reçoit plus aucun 'signal'.
PHP ne gère pas les threads.
Tu peux t'en "pseudo-sortir" en utilisant poll ou select avec un timeout mais clairement, php n'a pas été pensé pour ça.
a+ -- Xavier Garreau http://www.xgarreau.org/
loufoque
Est-il possible de faire des threads en PHP ?
Non. Tu peux utiliser un processus à part puis te débrouiller pour communiquer avec lui ou utiliser gtk::idle_add qui nécessite de ne pas rendre tes appels trop bloquants.
Est-il possible de faire des sockets asynchrones, et est ce que ça me serait utile ?
Oui c'est possible. Des sockets non-bloquantes ou select() peuvent parvenir à cela.
Est-il possible de faire des threads en PHP ?
Non.
Tu peux utiliser un processus à part puis te débrouiller pour
communiquer avec lui ou utiliser gtk::idle_add qui nécessite de ne pas
rendre tes appels trop bloquants.
Est-il possible de faire des sockets asynchrones, et est ce que ça me
serait utile ?
Oui c'est possible. Des sockets non-bloquantes ou select() peuvent
parvenir à cela.
Non. Tu peux utiliser un processus à part puis te débrouiller pour communiquer avec lui ou utiliser gtk::idle_add qui nécessite de ne pas rendre tes appels trop bloquants.
Est-il possible de faire des sockets asynchrones, et est ce que ça me serait utile ?
Oui c'est possible. Des sockets non-bloquantes ou select() peuvent parvenir à cela.
Ta boucle tu la lances où ? Normalement, j'espere (remarque je ne connais pas phpgtk, mais je connais bien gtk) tu initialise ton interface, tes fonctions et tu lances ta boucle gtk::main(). À partir de ce moment là ton gestionaire gtk (ici php) se doit de gerer les thread, sinon comment veut-il envoyer les signaux qui vont bien ?
Il te faudra donc initialiser ta boucle de socket suite à un evenement quelquqonque (genre chargement de la fenetre qui existe 'realize' par exemple peu correspondre à ce que tu veux)
Pour l'instant, je créé un socket suite à l'évènement 'clicked' d'un
bouton. Je lance ensuite la boucle que j'ai cité plus plus haut. C'est là que ça pose problème car je n'en ressort plus et donc GTK ne récupère jamais la main. (plus aucun signaux ne sont traités etc ...)
Je suis obligé de faire cette boucle pour lire en continus ce qu'y arrive sur mon socket !
Comment faire pour exécuter cette boucle sans pour autant bloquer les traitements effectués par GTK ?
PS: Sans vouloir troller d'aucune façon, un autre language ne serait pas plus adapté pour le gtk que php ?
Heuu ... Certainement ! lol disons que je connais rapidement GTK et que
je voulais tester avec PHP qui est (pour moi) un langage très agréable.
Ta boucle tu la lances où ?
Normalement, j'espere (remarque je ne connais pas phpgtk, mais je
connais bien gtk) tu initialise ton interface, tes fonctions et tu
lances ta boucle gtk::main(). À partir de ce moment là ton gestionaire
gtk (ici php) se doit de gerer les thread, sinon comment veut-il envoyer
les signaux qui vont bien ?
Il te faudra donc initialiser ta boucle de socket suite à un evenement
quelquqonque (genre chargement de la fenetre qui existe 'realize' par
exemple peu correspondre à ce que tu veux)
Pour l'instant, je créé un socket suite à l'évènement 'clicked' d'un
bouton. Je lance ensuite la boucle que j'ai cité plus plus haut. C'est
là que ça pose problème car je n'en ressort plus et donc GTK ne récupère
jamais la main. (plus aucun signaux ne sont traités etc ...)
Je suis obligé de faire cette boucle pour lire en continus ce qu'y
arrive sur mon socket !
Comment faire pour exécuter cette boucle sans pour autant bloquer les
traitements effectués par GTK ?
PS: Sans vouloir troller d'aucune façon, un autre language ne serait pas
plus adapté pour le gtk que php ?
Heuu ... Certainement ! lol disons que je connais rapidement GTK et que
je voulais tester avec PHP qui est (pour moi) un langage très agréable.
Ta boucle tu la lances où ? Normalement, j'espere (remarque je ne connais pas phpgtk, mais je connais bien gtk) tu initialise ton interface, tes fonctions et tu lances ta boucle gtk::main(). À partir de ce moment là ton gestionaire gtk (ici php) se doit de gerer les thread, sinon comment veut-il envoyer les signaux qui vont bien ?
Il te faudra donc initialiser ta boucle de socket suite à un evenement quelquqonque (genre chargement de la fenetre qui existe 'realize' par exemple peu correspondre à ce que tu veux)
Pour l'instant, je créé un socket suite à l'évènement 'clicked' d'un
bouton. Je lance ensuite la boucle que j'ai cité plus plus haut. C'est là que ça pose problème car je n'en ressort plus et donc GTK ne récupère jamais la main. (plus aucun signaux ne sont traités etc ...)
Je suis obligé de faire cette boucle pour lire en continus ce qu'y arrive sur mon socket !
Comment faire pour exécuter cette boucle sans pour autant bloquer les traitements effectués par GTK ?
PS: Sans vouloir troller d'aucune façon, un autre language ne serait pas plus adapté pour le gtk que php ?
Heuu ... Certainement ! lol disons que je connais rapidement GTK et que
je voulais tester avec PHP qui est (pour moi) un langage très agréable.
lkm
* dans les commentaires de ces 2 pages, il y a des choses interessantes qui peuvent aider.
Voici (pour ceux que ça intéresse) comment je m'en suis sortis face à ce problème.
Après une petite recherche sur php.net j'ai trouvé la fonction stream_set_blocking() qui me permet de rendre 'non bloquant' la fonction fread() que j'utilise pour lire mon socket. J'obtiens ainsi un socket asynchrone.
Ensuite j'ai initialisé un Timer Gtk : gtk::timeout_add(100, 'ma_fonction')
Celui-ci va donc lancer ma_fonction() toutes les 100 millisecondes afin de lire mon socket à l'aide de fread() qui passera la main dans le cas où il n'y a rien à lire. Gtk peut ainsi continuer son travail.
* c'est une tres bonne idée de developper en php-gtk (contrairement a ce que disent certains ....).
Pensez-vous qu'il est envisageable de faire une appli de taille moyenne en phpgtk ? Je remarque une certaine lenteur au démarrage de l'appli qui ne fait pour l'instant pas grand chose, je me demande les performances que l'on peut obtenir en comparaison à d'autres langages scripts supportants gtk (python par exemple).
Avez-vous déjà entendus parler d'une éventuelle implémentation des threads dans PHP, ou encore d'une eventuelle orientation vers des GUI ?
Un avis général sur la question m'intérésse :)
* dans les commentaires de ces 2 pages, il y a des choses interessantes
qui peuvent aider.
Voici (pour ceux que ça intéresse) comment je m'en suis sortis face à ce
problème.
Après une petite recherche sur php.net j'ai trouvé la fonction
stream_set_blocking() qui me permet de rendre 'non bloquant' la fonction
fread() que j'utilise pour lire mon socket. J'obtiens ainsi un socket
asynchrone.
Ensuite j'ai initialisé un Timer Gtk :
gtk::timeout_add(100, 'ma_fonction')
Celui-ci va donc lancer ma_fonction() toutes les 100 millisecondes afin
de lire mon socket à l'aide de fread() qui passera la main dans le cas
où il n'y a rien à lire. Gtk peut ainsi continuer son travail.
* c'est une tres bonne idée de developper en php-gtk (contrairement
a ce que disent certains ....).
Pensez-vous qu'il est envisageable de faire une appli de taille moyenne
en phpgtk ? Je remarque une certaine lenteur au démarrage de l'appli qui
ne fait pour l'instant pas grand chose, je me demande les performances
que l'on peut obtenir en comparaison à d'autres langages scripts
supportants gtk (python par exemple).
Avez-vous déjà entendus parler d'une éventuelle implémentation des
threads dans PHP, ou encore d'une eventuelle orientation vers des GUI ?
* dans les commentaires de ces 2 pages, il y a des choses interessantes qui peuvent aider.
Voici (pour ceux que ça intéresse) comment je m'en suis sortis face à ce problème.
Après une petite recherche sur php.net j'ai trouvé la fonction stream_set_blocking() qui me permet de rendre 'non bloquant' la fonction fread() que j'utilise pour lire mon socket. J'obtiens ainsi un socket asynchrone.
Ensuite j'ai initialisé un Timer Gtk : gtk::timeout_add(100, 'ma_fonction')
Celui-ci va donc lancer ma_fonction() toutes les 100 millisecondes afin de lire mon socket à l'aide de fread() qui passera la main dans le cas où il n'y a rien à lire. Gtk peut ainsi continuer son travail.
* c'est une tres bonne idée de developper en php-gtk (contrairement a ce que disent certains ....).
Pensez-vous qu'il est envisageable de faire une appli de taille moyenne en phpgtk ? Je remarque une certaine lenteur au démarrage de l'appli qui ne fait pour l'instant pas grand chose, je me demande les performances que l'on peut obtenir en comparaison à d'autres langages scripts supportants gtk (python par exemple).
Avez-vous déjà entendus parler d'une éventuelle implémentation des threads dans PHP, ou encore d'une eventuelle orientation vers des GUI ?
Un avis général sur la question m'intérésse :)
loufoque
Pensez-vous qu'il est envisageable de faire une appli de taille moyenne en phpgtk ? Je remarque une certaine lenteur au démarrage de l'appli qui ne fait pour l'instant pas grand chose, je me demande les performances que l'on peut obtenir en comparaison à d'autres langages scripts supportants gtk (python par exemple).
PyGTK est très bien, et bien supérieur à PHP-GTK. D'ailleurs Python est bien supérieur que PHP en tant que langage de programmmation. Enfin moi je préfère utiliser wxwidgets pour plus de portabilité.
Tu utilises bien PHP4-GTK1 ? Ils devaient sortir PHP5-GTK2.4, qui aurait rendu le truc plus utilisable mais j'ai pas l'impression qu'il y ait encore eu de sortie officielle.
Avez-vous déjà entendus parler d'une éventuelle implémentation des threads dans PHP, ou encore d'une eventuelle orientation vers des GUI ?
Il faut arrêter de se leurrer, PHP est orienté web. Il n'a jamais été prévu d'en faire un langage de programmation qui tient la route pour une utilisation autre, même si cela est possible. En tous cas, ce n'est pas du tout sur quoi travaillent les développeurs, et le multithreading n'arrivera sûrement pas avant PHP 7.
Un avis général sur la question m'intérésse :)
Si tu veux un langage interprété pour faire des GUI je te conseille Python.
Pensez-vous qu'il est envisageable de faire une appli de taille moyenne
en phpgtk ? Je remarque une certaine lenteur au démarrage de l'appli qui
ne fait pour l'instant pas grand chose, je me demande les performances
que l'on peut obtenir en comparaison à d'autres langages scripts
supportants gtk (python par exemple).
PyGTK est très bien, et bien supérieur à PHP-GTK. D'ailleurs Python est
bien supérieur que PHP en tant que langage de programmmation.
Enfin moi je préfère utiliser wxwidgets pour plus de portabilité.
Tu utilises bien PHP4-GTK1 ? Ils devaient sortir PHP5-GTK2.4, qui aurait
rendu le truc plus utilisable mais j'ai pas l'impression qu'il y ait
encore eu de sortie officielle.
Avez-vous déjà entendus parler d'une éventuelle implémentation des
threads dans PHP, ou encore d'une eventuelle orientation vers des GUI ?
Il faut arrêter de se leurrer, PHP est orienté web. Il n'a jamais été
prévu d'en faire un langage de programmation qui tient la route pour une
utilisation autre, même si cela est possible.
En tous cas, ce n'est pas du tout sur quoi travaillent les développeurs,
et le multithreading n'arrivera sûrement pas avant PHP 7.
Un avis général sur la question m'intérésse :)
Si tu veux un langage interprété pour faire des GUI je te conseille Python.
Pensez-vous qu'il est envisageable de faire une appli de taille moyenne en phpgtk ? Je remarque une certaine lenteur au démarrage de l'appli qui ne fait pour l'instant pas grand chose, je me demande les performances que l'on peut obtenir en comparaison à d'autres langages scripts supportants gtk (python par exemple).
PyGTK est très bien, et bien supérieur à PHP-GTK. D'ailleurs Python est bien supérieur que PHP en tant que langage de programmmation. Enfin moi je préfère utiliser wxwidgets pour plus de portabilité.
Tu utilises bien PHP4-GTK1 ? Ils devaient sortir PHP5-GTK2.4, qui aurait rendu le truc plus utilisable mais j'ai pas l'impression qu'il y ait encore eu de sortie officielle.
Avez-vous déjà entendus parler d'une éventuelle implémentation des threads dans PHP, ou encore d'une eventuelle orientation vers des GUI ?
Il faut arrêter de se leurrer, PHP est orienté web. Il n'a jamais été prévu d'en faire un langage de programmation qui tient la route pour une utilisation autre, même si cela est possible. En tous cas, ce n'est pas du tout sur quoi travaillent les développeurs, et le multithreading n'arrivera sûrement pas avant PHP 7.
Un avis général sur la question m'intérésse :)
Si tu veux un langage interprété pour faire des GUI je te conseille Python.
loufoque
Heuu ... Certainement ! lol disons que je connais rapidement GTK et que je voulais tester avec PHP qui est (pour moi) un langage très agréable.
Oui enfin GTK1 ça pue grave...
Heuu ... Certainement ! lol disons que je connais rapidement GTK et que
je voulais tester avec PHP qui est (pour moi) un langage très agréable.
Heuu ... Certainement ! lol disons que je connais rapidement GTK et que je voulais tester avec PHP qui est (pour moi) un langage très agréable.
Oui enfin GTK1 ça pue grave...
lkm
Si tu veux un langage interprété pour faire des GUI je te conseille Python.
Après avoir fait quelques tests je me retrouve avec les mêmes conclusions que toi : PHP est orienté web, et faire du phpgtk pour une grosse appli c'est du casi-suicide !
Et il est vrai que pygtk convient bien mieu, pour faire des applications propres, solides et portables ! Mais là ... On s'écarte de la charte :p
Si tu veux un langage interprété pour faire des GUI je te conseille Python.
Après avoir fait quelques tests je me retrouve avec les mêmes
conclusions que toi :
PHP est orienté web, et faire du phpgtk pour une grosse appli c'est du
casi-suicide !
Et il est vrai que pygtk convient bien mieu, pour faire des applications
propres, solides et portables ! Mais là ... On s'écarte de la charte :p
Si tu veux un langage interprété pour faire des GUI je te conseille Python.
Après avoir fait quelques tests je me retrouve avec les mêmes conclusions que toi : PHP est orienté web, et faire du phpgtk pour une grosse appli c'est du casi-suicide !
Et il est vrai que pygtk convient bien mieu, pour faire des applications propres, solides et portables ! Mais là ... On s'écarte de la charte :p
frederic girard
loufoque wrote:
Est-il possible de faire des threads en PHP ?
Non. Tu peux utiliser un processus à part puis te débrouiller pour communiquer avec lui ou utiliser gtk::idle_add qui nécessite de ne pas rendre tes appels trop bloquants.
Est-il possible de faire des sockets asynchrones, et est ce que ça me serait utile ?
Oui c'est possible. Des sockets non-bloquantes ou select() peuvent parvenir à cela. Concernant une alternative a GTK, il existe (pas testé encore)
winbinder, l'OS doit evidemment etre du windows (c'est une dll qui s'inreface nativeement avec les API windows), toutefois, l'alternative est interessante dans le sens ou ca doit etre moins gourmant et plus véloce que GTK...A tester si qqun a le courage;) Et nous tenir informer bien sur:) http://www.hypervisual.com/winbinder/index.php
loufoque wrote:
Est-il possible de faire des threads en PHP ?
Non.
Tu peux utiliser un processus à part puis te débrouiller pour
communiquer avec lui ou utiliser gtk::idle_add qui nécessite de ne pas
rendre tes appels trop bloquants.
Est-il possible de faire des sockets asynchrones, et est ce que ça me
serait utile ?
Oui c'est possible. Des sockets non-bloquantes ou select() peuvent
parvenir à cela.
Concernant une alternative a GTK, il existe (pas testé encore)
winbinder, l'OS doit evidemment etre du windows (c'est une dll qui
s'inreface nativeement avec les API windows), toutefois, l'alternative
est interessante dans le sens ou ca doit etre moins gourmant et plus
véloce que GTK...A tester si qqun a le courage;) Et nous tenir informer
bien sur:)
http://www.hypervisual.com/winbinder/index.php
Non. Tu peux utiliser un processus à part puis te débrouiller pour communiquer avec lui ou utiliser gtk::idle_add qui nécessite de ne pas rendre tes appels trop bloquants.
Est-il possible de faire des sockets asynchrones, et est ce que ça me serait utile ?
Oui c'est possible. Des sockets non-bloquantes ou select() peuvent parvenir à cela. Concernant une alternative a GTK, il existe (pas testé encore)
winbinder, l'OS doit evidemment etre du windows (c'est une dll qui s'inreface nativeement avec les API windows), toutefois, l'alternative est interessante dans le sens ou ca doit etre moins gourmant et plus véloce que GTK...A tester si qqun a le courage;) Et nous tenir informer bien sur:) http://www.hypervisual.com/winbinder/index.php