Les Websockets sont une technologie cool et de pointe intégrée à HTML5. Fondamentalement, vous pouvez ouvrir une prise Web pour permettre une communication bidirectionnelle persistante avec un serveur Web. Le client (interface utilisateur) peut envoyer spontanément des messages, et le serveur peut également envoyer des messages.
La technologie existante (JavaScript) exige que tout soit démarré par le client - le serveur ne peut rien envoyer au client qu'il n'a pas demandé. Les scripts doivent donc être constamment actualisés et demander de nouveau des données qui n'ont peut-être pas changé. Les Websockets fonctionnent davantage sur une base " push " et permettent aux nouvelles données de descendre à tout moment.
Malheureusement, la plupart (tout ce que je peux trouver, de toute façon) des implémentations Websocket nécessitent une application serveur spécifique pour fonctionner. Les gens exécuteront Apache sur les ports 80 et 443 (http et https) et exécuteront un autre système (généralement Node.js) sur un autre port (par exemple 8000 ou 8080) pour gérer les demandes de socket Web.
Cela fonctionne, bien sûr, mais il a quelques inconvénients.
J'ai un plugin que je veux construire qui bénéficierait grandement de l'utilisation de websockets dans WordPress. Mais si un utilisateur doit installer un deuxième serveur Web (généralement impossible pour les personnes ayant un hébergement partagé), cela ne fonctionnera pas comme un plugin.
Donc, pour ceux d'entre vous qui ont de l'expérience, comment pourriez-vous rendre WordPress compatible avec les websockets? Souhaitez-vous faire WordPress gérer la communication elle-même, ou regrouper un autre script de mini-serveur dans le plugin? Si vous l'avez déjà fait, comment l'avez-vous accompli sans casser WordPress lui-même?
Des ressources possibles?
Mise à jour 21/09/11
Avec toutes les discussions sur la façon dont Apache (le serveur le plus couramment installé pour exécuter WP sur un hôte partagé) ne peut pas vraiment gérer les websockets nativement, je me demande une alternative. Plusieurs plugins (JetPack, par exemple) communiquent avec un service externe ou une API pour générer du contenu.
Stats demande le contenu d'Automattic. Akismet envoie des données dans les deux sens à partir d'un serveur externe. Après la date limite soumet le contenu au moment de la publication. Quelques outils SEO font des va-et-vient via des systèmes externes.
Donc, comme alternative au logement du code websocket dans un plugin WordPress, serait-il possible d'héberger un service websocket dans un emplacement central et d'avoir un frontend WordPress interagir avec cela à la place?
la source
Réponses:
Les WebSockets utilisent le protocole websockets: WS: /example.com/yourscript.js et ouvrent une connexion synchrone - ce qui signifie que la connexion est maintenue ouverte et dédiée au navigateur.
Les serveurs httpd, comme apache2 (utilisé par la plupart des hébergeurs partagés) utilisent le protocole http:
http://example.com/yourscript.js
et ouvrent une connexion asynchrone - ce qui signifie qu'aucune connexion n'est maintenue ouverte entre le serveur et le navigateur. (Vous pouvez prolonger modestement les connexions ouvertes en définissant certains paramètres de configuration - mais en règle générale, c'est asynchrone.)Comme vous pouvez l'imaginer, le maintien de connexions ouvertes entre le navigateur et le serveur consacre plus de ressources de serveur à chaque connexion de navigateur, et est donc plus taxant les ressources du serveur que la suppression des connexions après chaque demande. Les hébergeurs mutualisés sont naturellement peu enclins à prendre en charge WS sur l'hébergement mutualisé.
Bien que certains hôtes partagés puissent avoir installé mod_python, permettant ainsi aux utilisateurs de votre plugin d'exécuter pywebsocket , la propre documentation de pywebsocket indique clairement que "pywebsocket est destiné à des fins de test ou d'expérimentation".
Donc, bien que l'on puisse imaginer un plugin regroupant du code python pour créer un serveur pywebsocket, étant donné un serveur apache qui le prend en charge, je ne pense pas qu'il serait jamais raisonnable de distribuer un plugin qui l'a fait.
la source
En réponse à votre mise à jour, à mon avis et sur la base des recherches que j'ai faites, ce serait la meilleure option. Encore mieux serait de créer le plugin frontal et de créer le service websocket externe pour parler avec les plugins, et de facturer des frais pour que vous puissiez monétiser votre idée, si vous le souhaitez. Vous pouvez même fournir le code source du service websocket et créer un paramètre dans le plugin pour définir où (quel domaine / IP et port) se trouve le service websocket.
la source
Oubliez l'apache2 "classique" - apache2-mpm-prefork - à cet effet. Apache2-mpm-event pourrait peut-être gérer cela, mais c'est expérimental. Comme apache2 n'est pas piloté par les événements, le problème décrit par @marfarma existe. Vous aurez besoin d'un serveur Web événementiel pour ce type de service, par exemple cherokee ou nginx.
nginx peut être un réel avantage pour WordPress (car wordpress.com l'utilise également comme serveur), et il peut proxy des requêtes spécifiées à un service node.js par exemple.
Quelques exemples dans le sujet:
J'ai également fait un petit tutoriel pour la configuration de nginx + php-fpm + wordpress .
la source
Une autre solution potentielle consiste à utiliser un fournisseur de sockets Web tiers, j'ai un peu joué avec Pusher (http://pusher.com/), il y a une API sur laquelle vous pouvez puiser qui pourrait bien fonctionner pour ce que vous essayez de faire. J'ai réfléchi à la façon dont je pourrais l'utiliser dans mes propres sites WordPress.
Un inconvénient possible est que d'autres personnes essayant d'utiliser votre plugin devraient également obtenir un compte Pusher pour le faire fonctionner. Il est beaucoup plus facile de travailler qu'avec l'installation de votre propre serveur Web Sockets et sa maintenance, ce serait en fait un avantage pour les autres qui essaient d'utiliser votre plugin.
la source
La réponse courte est: oui, c'est faisable. Je pourrais examiner quelque chose d'un peu plus distribué qu'un seul point de défaillance VPS que vous hébergez, cependant. Peut-être examiner certains systèmes EC2 à charge équilibrée ou quelque chose comme ça? (Je suppose que vous avez une source de revenus pour fournir de telles commodités. Sourire )
la source