WordPress può essere creato per supportare i websocket?


18

I websocket sono una tecnologia avanzata e all'avanguardia avvolta in HTML5. Fondamentalmente, è possibile aprire un websocket per abilitare la comunicazione persistente a 2 vie con un server Web. Il client (interfaccia utente) può inviare spontaneamente messaggi e anche il server può inviare messaggi.

La tecnologia esistente (JavaScript) richiede che tutto sia avviato dal client: il server non può inviare al client nulla che il client non abbia richiesto. Pertanto, gli script devono aggiornare costantemente e richiedere nuovamente i dati che potrebbero non essere cambiati. I websocket funzionano di più su una base " push " e lasciano cadere nuovi dati nel pipe ogni volta.

Sfortunatamente, la maggior parte delle implementazioni di websocket (tutto quello che riesco a trovare) richiede che un'applicazione server specifica funzioni. Le persone eseguiranno Apache sulle porte 80 e 443 (http e https) e eseguiranno un altro sistema (in genere Node.js) su un'altra porta (ovvero 8000 o 8080) per gestire le richieste di websocket.

Funziona, ovviamente, ma presenta alcuni inconvenienti.

Ho un plugin che voglio costruire che trarrebbe grandi benefici dall'uso dei websocket all'interno di WordPress. Ma se un utente deve installare un secondo server Web (di solito impossibile per le persone con hosting condiviso), allora non funzionerà come plugin.

Quindi, per chiunque di voi abbia esperienza, come renderebbe WordPress compatibile con i websocket? Faresti in modo che WordPress gestisca la comunicazione stessa o impacchetti un altro script mini-server nel plugin? Se l'hai già fatto, come l'hai realizzato senza rompere WordPress stesso?

Possibili risorse?


21/09/11 Aggiornamento

Con tutto il discorso su come Apache (il server più comunemente installato per eseguire WP su un host condiviso) non riesca davvero a gestire nativamente i websocket, mi chiedo un'alternativa. Diversi plugin (JetPack, ad esempio) parlano con un servizio esterno o API per generare contenuto.

Le statistiche richiedono contenuti da Automattic. Akismet invia i dati avanti e indietro da un server esterno. Dopo la scadenza, il contenuto viene inviato al momento della pubblicazione. Alcuni strumenti SEO passano avanti e indietro attraverso sistemi esterni.

Quindi, in alternativa all'alloggiamento del codice del websocket all'interno di un plug-in di WordPress, sarebbe possibile ospitare un servizio di websocket in una posizione centrale e far interagire un frontend di WordPress con quello?


3
La linea di fondo è questa: se i websocket non funzionano bene con il webserver nativo, non è possibile farlo facilmente con quel webserver. Questo non è un problema specifico di WordPress. Come hai detto, i websocket richiedono generalmente un server separato come node.js o qualcosa del genere, non funzioneranno affatto bene con Apache. Quindi il tuo problema non è uno dei "come posso renderlo compatibile con WordPress", è "come faccio a farlo funzionare sul minimo comune denominatore di hosting", che è un altro bollitore di pesci.
Otto,

Il supporto WebSocket potrebbe essere aggiunto al core di WordPress, con un server WebSocket incorporato e un endpoint come admin-ajax.php, no? Esiste anche la libreria di backend JavaScript / Node.js Socket.IO per WebSocket con polling come fallback, sviluppato da Automattic, la società dietro WordPress.
Bapt

Risposte:


8

WebSocket utilizza il protocollo websocket: WS: /example.com/yourscript.js e apre una connessione sincrona, il che significa che la connessione viene mantenuta aperta e dedicata al browser.

I server httpd, come apache2 (utilizzato dalla maggior parte dei provider di hosting condiviso) utilizzano il protocollo http: http://example.com/yourscript.jse aprono una connessione asincrona, il che significa che nessuna connessione viene mantenuta aperta tra il server e il browser. (Puoi prolungare le connessioni aperte, modestamente, impostando determinati parametri di configurazione - ma in generale, è asincrono.)

Come puoi immaginare, mantenere connessioni aperte tra il browser e il server dedica più risorse del server a ciascuna connessione del browser ed è quindi più tassativo delle risorse del server che eliminare le connessioni dopo ogni richiesta. I provider di hosting condiviso sono comprensibilmente inclini a supportare WS sull'hosting condiviso.

Mentre alcuni host condivisi possono avere mod_python installato, consentendo così agli utenti dei plug-in di eseguire pywebsocket , la documentazione di pywebsocket afferma chiaramente che "pywebsocket è destinato a scopi di test o sperimentali".

Quindi, sebbene si possa immaginare un plugin che raggruppa il codice Python per creare un server pywebsocket, dato un server Apache che lo supporta, non credo che sarebbe mai ragionevole distribuire un plugin che lo ha fatto.


Esistono alcune semplici librerie PHP che affermano di supportare i websocket. Se funzionassero efficacemente all'interno di Apache sarebbe un test interessante. Vedi il mio aggiornamento per i collegamenti ...
EAMann

3

In risposta al tuo aggiornamento, secondo me e sulla base delle ricerche che ho fatto, sarebbe l'opzione migliore. Ancora meglio sarebbe creare il plug-in front-end e creare il servizio di websocket esterno per parlare con i plug-in e addebitare una commissione per poter monetizzare la tua idea, se lo desideri. È anche possibile fornire il codice sorgente per il servizio WebSocket e creare un'impostazione nel plug-in per impostare dove (quale dominio / IP e porta) si trova il servizio WebSocket.


2

Dimentica il "classico" apache2 - apache2-mpm-prefork - per questo scopo. Forse l'evento apache2-mpm potrebbe gestirlo, ma è sperimentale. Poiché apache2 non è guidato dagli eventi, esiste il problema descritto da @marfarma. Avrai bisogno di un server web basato sugli eventi per questo tipo di servizio, ad esempio cherokee o nginx.

nginx può essere un vero vantaggio per WordPress (dal momento che wordpress.com lo utilizza anche come server) e può ad esempio inviare richieste specifiche a un servizio node.js.

Alcuni esempi nell'argomento:

Ho anche fatto un piccolo tutorial per l'installazione di nginx + php-fpm + wordpress .


Dimenticare l'approccio "classico" non è in realtà un'opzione per produrre un plugin facile da installare per gli utenti non esperti. Sì, usare nginx, cherokee o node.js per servire cose dal server è un'opzione, ma non puoi semplicemente metterlo in un file readme e sperare che gli utenti a) lo capiscano o b) siano in grado di fare qualcosa per esso.
EAMann,

apache2-mpm-prefork non è stato progettato per essere in grado di gestire questo tipo di utilizzo. Ci sono plugin che richiedono memcached, APC, ecc., Ciò potrebbe richiedere solo un server web basato su eventi. Questo è un requisito di back-end, mpm-prefork e mpm-worker non è per questo.
petermolnar,

1

Un'altra potenziale soluzione è quella di utilizzare un provider di socket Web di terze parti, ho giocato un po 'con Pusher (http://pusher.com/) un po', c'è un'API in cui puoi attingere che potrebbe funzionare bene per quello che stai provando a fare. Ho riflettuto su come potrei farne uso nei miei siti WordPress.

Un possibile svantaggio è che anche altre persone che cercano di utilizzare il plug-in dovrebbero ottenere un account Pusher per farlo funzionare. È molto più facile lavorare rispetto all'installazione del proprio server Web Socket e alla sua manutenzione, questo sarebbe effettivamente un vantaggio in realtà quando si tratta di provare a utilizzare il proprio plug-in.


0

La risposta breve è: sì, è fattibile. Potrei esaminare qualcosa di un po 'più distribuito di un singolo punto di errore VPS che ospiti, però. Forse guardare in alcuni sistemi EC2 bilanciati dal carico o qualcosa del genere? (Suppongo che tu abbia un flusso di entrate per fornire tali comodità. Sorriso )


1
"un flusso di entrate per fornire tali comodità" ... sarebbe bello :-)
EAMann
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.