Meilleure approche pour (cross-platform) en temps réel des flux de données en PHP?
Je me demandais comment faire "vrai" (semi) en temps réel des flux de données avec PHP.
Applications possibles: salles de clavardage, des ventes aux enchères, des jeux, etc.
Par "vrai", je veux dire que les données n'est pas seulement écrit quelque part et interrogés en permanence, mais en réalité, le streaming pour le client en quelque sorte.
Par "semi", je veux dire c'est pas grave si seulement le flux à partir du serveur vers le client est en temps réel, et les messages du client vers le serveur ne le sont pas.
Pour la communication entre le client et le serveur, j'aimerais coller avec de la plaine HTTP (AJAX) plutôt qu'à une autre protocole.
Streaming pour le client HTTP est possible manuellement par rinçage de la mémoire tampon de sortie.
La question est ce que pour vous connecter que le script du côté serveur?
Et une fois qu'il est connecté, faire un blocage de la lecture, plutôt que de l'interrogation des modifications.
La mémoire partagée (shmop) l'extension du travail, mais il n'est pas multi-plateforme.
Peut-être memcached pourrait fonctionner? Mais je ne sais pas si il y a un moyen de faire un blocage lire, il descend donc dans les bureaux de vote à nouveau - même si je suis sûr que memcached est assez rapide, je n'aime pas l'idée d'une interrogation continue.
Des idées?
OriginalL'auteur mindplay.dk | 2010-12-21
Vous devez vous connecter pour publier un commentaire.
PHP n'est pas bien adapté pour la mise en œuvre en temps réel des flux de données. PHP est très lente, et n'est pas conçu pour construire des applications multi-thread. Vous feriez mieux de mettre en œuvre une véritable prise de serveur dans un langage comme Python ou Java.
Cela dit, je vous recommande vivement de vérifier NodeJS:
http://nodejs.org/
Il utilise un événement asynchrone modèle I/O, au lieu d'avoir des blocs de threads dans une boucle d'événements. NodeJS serveurs sont écrits en Javascript. NodeJS est rapide, les échelles, et a une faible courbe d'apprentissage.
Clients de se connecter à un NodeJS serveur HTTP à l'aide d'interrogation des requêtes Ajax. PHP peut se connecter à NodeJS directement et les notifications push. Ou PHP pourrais écrire un message de la file d'attente, ou de la base de données, memcache, etc, et NodeJS serait sondage de ces magasins de données pour les mises à jour, et envoyer de nouveaux messages aux clients.
Vous auriez éventuellement besoin d'écrire votre propre démon pour faire le lien entre de NodeJS pour MySQL, memcached, etc. lors de l'interrogation pour les mises à jour. NodeJS permettrait de garder un socket ouvert avec un démon. Le démon aurait sondage magasins de données pour les mises à jour, et envoyer les mises à jour de NodeJS. Un NodeJS HTTP server serait alors envoyer les mises à jour aux clients.
Voir ce tutoriel pour la mise en œuvre en temps réel un flux Twitter:
http://net.tutsplus.com/tutorials/javascript-ajax/learning-serverside-javascript-with-node-js/
Vous vous trompez au sujet de PHP est lente. Mais je suis d'accord, il n'était probablement pas conçu parallèlement à/applications multi-thread de ce type. Réponse acceptée.
nodejs est mono-thread et n'est pas à l'échelle
nodejs est pas mono-thread rickgaribay.net/archive/2012/01/28/...
+1 sur le "mauvais autour de PHP et de la lenteur". Il n'est pas. Il a des limites autour de filetage et ce n'est certainement pas adapté pour les connexions persistantes, mais il n'est pas lent.
OriginalL'auteur Simian
Si vous êtes à l'aide de HTML et de Javascript, alors vous voulez les WebSockets. Si c'est Flash ou quoi que ce soit d'autre, puis normal, les sockets TCP.
L'idée est que vous exécutez un serveur de fichier (écrit en PHP), qui attend les connexions. Une fois qu'il est connecté à un ou plusieurs clients, des données peuvent être poussés dans les deux sens. Il y a un peu de PHP WebSocket projets. Découvrez ce:
http://code.google.com/p/phpwebsocket
Il y a aussi un cadre appelé Squelette que j'ai contribué à, qui dispose d'un serveur WebSocket bibliothèque construite dans. Toujours dans l'instabilité des étapes, bien que.
http://code.google.com/p/skeleton
Malheureusement, les WebSockets sont encore une nouvelle technologie, ils ne sont donc pas pris en charge de manière universelle. @Christian mentionné, vous pourriez voulez utiliser le Socket.IO bibliothèque.
Je retire ce que Ratchet est une belle idée, mais PHP en tant que tel est pas adapté pour les applications en temps réel comme un serveur socket - cet article qui explique pourquoi.
OriginalL'auteur Jonah
Si vous voulez communiquer entre PHP et une autre langue (par exemple, une application C++), vous voudrez peut-être regarder dans Apache Thrift (http://thrift.apache.org/). Apache Épargne est largement utilisé à la Facebook pour "évolutive de la croix-développement des services de langage".
Edit: je serais probablement utiliser Apache Épargne pour communiquer avec un Twisted application qui écoute sur le port 80 et ont les navigateurs se connecter à l'Tordu application en utilisant soit le temps d'interrogation ou un websocket. Vous pouvez aussi regarder dans Socket.IO, c'est une croix-navigateur web socket de mise en œuvre qui est faite pour des applications temps-réel.
Fondamentalement, vous auriez votre demande de pousser pour votre Tordu serveur web à l'aide d'Aubaines et il vous faudra alors passer le message à toutes les connexions ouvertes.
OriginalL'auteur Christian Joudrey