WordPress peut-il être conçu pour prendre en charge les websockets?

15

Websockets est une technologie de pointe intéressante intégrée à HTML5. En principe, vous pouvez ouvrir un WebSocket pour permettre une communication bidirectionnelle persistante avec un serveur Web. Le client (interface utilisateur) peut envoyer des messages spontanément et le serveur peut également envoyer des messages.

La technologie existante (JavaScript) nécessite que tout soit démarré par le client - le serveur ne peut rien envoyer. au client que le client n'a pas demandé. Les scripts doivent donc constamment actualiser et redemander des données qui pourraient ne pas avoir changé. Les Websockets fonctionnent davantage sur une base de " push " et laissent les nouvelles données arriver à 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 vont exécuter Apache sur les ports 80 et 443 (http et https) et exécuter un autre système (généralement Node.js) sur un autre port (8000 ou 8080) pour gérer les requêtes Websocket.

Cela fonctionne, évidemment, mais il présente certains inconvénients.

Je souhaite créer un plugin 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 partageant un hébergement), cela ne fonctionnera pas comme un plugin.

Alors, pour ceux d'entre vous qui ont de l'expérience, comment rendriez-vous WordPress compatible avec les Websockets? Souhaitez-vous que WordPress gère la communication elle-même ou intégre un autre script de mini-serveur dans le plug-in? Si vous l'avez déjà fait, comment l'avez-vous accompli sans casser WordPress?

Ressources possibles?

Mise à jour du 21/09/11

Bien que Apache (le serveur le plus couramment installé pour exécuter WP sur un hôte partagé) ne puisse pas vraiment gérer les websockets de manière native, je me pose des questions sur 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 à Automattic. Akismet envoie des données d'un serveur externe. Après la date limite, le contenu est soumis au moment de la publication. Quelques outils de référencement font la navette entre des systèmes externes.

Donc, au lieu de loger le code websocket dans un plugin WordPress, serait-il possible d’héberger un service websocket dans un emplacement central et d’avoir une interface WordPress qui interagirait avec cela?

    
posée EAMann 19.09.2011 - 20:36

5 réponses

7

WebSockets utilise le protocole Websockets WS: /example.com/yourscript.js et ouvre une connexion synchrone, ce qui signifie que la connexion est maintenue ouverte et dédiée au navigateur.

enlace

Comme vous pouvez l’imaginer, le maintien de connexions ouvertes entre le navigateur et le serveur consacre davantage de ressources de serveur à chaque connexion de navigateur et impose donc davantage de ressources aux ressources de serveur que de supprimer des connexions après chaque demande. Les fournisseurs d’hébergement partagé ne sont naturellement pas disposés à prendre en charge WS sur un hébergement partagé.

Bien que mod_python puisse être installé sur certains hôtes partagés, permettant ainsi aux utilisateurs de votre plug-in d'exécuter la pywebsocket , la propre documentation de pywebsocket est claire. déclarez que "pywebsocket est destiné à des essais ou à des expériences".

Alors, même si on peut imaginer un plugin regroupant du code python pour créer un serveur pywebsocket, étant donné un serveur Apache qui le supporte, je ne pense pas qu'il serait raisonnable de distribuer un plugin qui le ferait.

    
réponse donnée marfarma 19.09.2011 - 22:27
3

En réponse à votre mise à jour, à mon avis et sur la base des recherches que j'ai effectuées, ce serait la meilleure option. Il serait même préférable de créer le plug-in front-end et le service websocket externe afin de dialoguer avec les plug-ins 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 plug-in pour définir l'emplacement du service websocket (quels domaine / IP et quel port).

    
réponse donnée user15143 13.04.2012 - 07:06
2

Oubliez le "classique" apache2 - apache2-mpm-prefork - à cette fin. Peut-être qu'apache2-mpm-event pourrait gérer cela, mais c'est expérimental. Apache2 n'étant pas piloté par un événement, 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 peut spécifier le proxy demandes à un service node.js par exemple.

Quelques exemples dans le sujet:

J'ai également réalisé un petit tutoriel sur la configuration de nginx + php-fpm + wordpress .

    
réponse donnée petermolnar 20.09.2011 - 08:04
1

Une autre solution potentielle consiste à utiliser un fournisseur de sockets Web tiers. J'ai un peu joué avec Pusher (http://pusher.com/). Il existe une API que vous pouvez exploiter qui pourrait bien fonctionner. pour ce que vous essayez de faire. Je réfléchis à la façon de l'utiliser dans mes propres sites WordPress.

Un inconvénient possible est que d’autres personnes essayant d’utiliser votre plugin devront également obtenir un compte Pusher pour que cela fonctionne. C’est beaucoup plus facile de travailler que d’installer votre propre serveur Web Sockets et de le maintenir, ce serait vraiment un avantage pour les autres utilisateurs qui essaient d’utiliser votre plugin.

    
réponse donnée Rick Curran 21.09.2011 - 23:46
0

La réponse courte est: oui, c'est faisable. Je pourrais peut-être regarder quelque chose d'un peu plus distribué qu'un point de défaillance VPS que vous hébergez, cependant. Peut-être envisager des systèmes EC2 à charge équilibrée ou un tel système? (Je suppose que vous disposez d'un flux de revenus permettant de telles commodités. sourire )

    
réponse donnée ZaMoose 21.09.2011 - 21:22

Lire d'autres questions sur les étiquettes