WordPress può supportare i WebSocket? Guida e soluzioni
I WebSocket sono una tecnologia avanzata integrata in HTML5. Fondamentalmente, puoi aprire un WebSocket per abilitare una comunicazione persistente e bidirezionale con un server web. Il client (interfaccia utente) può inviare messaggi spontaneamente e il server può rispondere allo stesso modo.
La tecnologia esistente (JavaScript) richiede che tutto sia avviato dal client - il server non può inviare nulla al client senza una richiesta esplicita. Quindi gli script devono costantemente aggiornarsi e ri-richiedere dati che potrebbero non essere cambiati. I WebSocket funzionano più su una base "push" e permettono ai nuovi dati di arrivare in qualsiasi momento.
Sfortunatamente, la maggior parte (tutte quelle che ho trovato, comunque) delle implementazioni WebSocket richiedono un'applicazione server specifica per funzionare. Le persone eseguono Apache sulle porte 80 e 443 (http e https) e un altro sistema (tipicamente Node.js) su una porta diversa (es. 8000 o 8080) per gestire le richieste WebSocket.
Questo funziona, ovviamente, ma ha alcuni svantaggi.
Ho un plugin che vorrei sviluppare e che trarrebbe grande beneficio dall'uso dei WebSocket all'interno di WordPress. Ma se un utente deve installare un secondo web server (solitamente impossibile per chi ha un hosting condiviso), allora non funzionerebbe come plugin.
Quindi, per quelli di voi che hanno esperienza, come rendereste WordPress compatibile con i WebSocket? Fareste in modo che WordPress gestisca direttamente la comunicazione, o includereste un altro mini-server script nel plugin? Se l'avete già fatto, come lo avete realizzato senza rompere WordPress stesso?
Possibili risorse?
Aggiornamento 21/09/11
Con tutte le discussioni su come Apache (il server più comunemente installato per eseguire WP su un hosting condiviso) non possa davvero gestire nativamente i WebSocket, mi chiedo se esista un'alternativa. Diversi plugin (JetPack, per esempio) comunicano con un servizio esterno o API per generare contenuti.
Stats richiede contenuti da Automattic. Akismet invia dati avanti e indietro da un server esterno. After the Deadline invia contenuti al momento della pubblicazione. Alcuni strumenti SEO scambiano informazioni attraverso sistemi esterni.
Quindi, come alternativa all'ospitare il codice WebSocket all'interno di un plugin WordPress, sarebbe fattibile ospitare un servizio WebSocket in una posizione centrale e far interagire un frontend WordPress con quello invece?

I WebSocket utilizzano il protocollo websocket: WS:/example.com/yourscript.js e stabiliscono una connessione sincrona - il che significa che la connessione rimane aperta e dedicata al browser.
I server httpd, come apache2 (utilizzato dalla maggior parte dei provider di hosting condiviso) usano il protocollo http: http://example.com/yourscript.js
e stabiliscono una connessione asincrona - significa che nessuna connessione rimane aperta tra il server e il browser. (È possibile prolungare le connessioni aperte, in misura modesta, 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, e quindi è più gravoso per le risorse del server rispetto all'interruzione delle connessioni dopo ogni richiesta. I provider di hosting condiviso comprensibilmente non sono inclini a supportare WS su hosting condiviso.
Sebbene alcuni host condivisi possano avere installato mod_python, permettendo così agli utenti del tuo plugin di eseguire pywebsocket, la documentazione di pywebsocket stessa afferma chiaramente che "pywebsocket è destinato a scopi di test o sperimentali".
Quindi, mentre si potrebbe immaginare un plugin che includa codice python per creare un server pywebsocket, dato un server apache che lo supporti, non credo sarebbe mai ragionevole distribuire un plugin che lo faccia.

In risposta al tuo aggiornamento, secondo me e in base alle ricerche che ho fatto, sarebbe l'opzione migliore in assoluto. Sarebbe ancora meglio creare il plugin front-end e il servizio websocket esterno per comunicare con i plugin, e applicare un costo per monetizzare la tua idea, se lo desideri. Potresti persino fornire il codice sorgente del servizio websocket e creare un'impostazione nel plugin per specificare dove si trova il servizio websocket (quale dominio/IP e porta).

Dimentica il "classico" apache2 - apache2-mpm-prefork - per questo scopo. Forse apache2-mpm-event potrebbe gestirlo, ma è sperimentale. Poiché apache2 non è event-driven, il problema descritto da @marfarma esiste davvero. Avrai bisogno di un web server event-driven per questo tipo di servizio, ad esempio cherokee o nginx.
nginx può essere un vero vantaggio per WordPress (anche wordpress.com lo usa come loro server), e può fare da proxy per richieste specifiche a un servizio node.js, ad esempio.
Alcuni esempi nell'argomento:
Ho anche creato un piccolo tutorial per la configurazione nginx + php-fpm + wordpress.

Dimenticare l'approccio "classico" non è davvero un'opzione per produrre un plugin facile da installare per utenti non tecnici. Sì, usare nginx, cherokee o node.js per servire i contenuti dal server è un'opzione, ma non puoi semplicemente metterlo nel readme di un plugin e sperare che gli utenti a) lo capiscano o b) siano in grado di fare qualcosa al riguardo.

apache2-mpm-prefork non è stato progettato per gestire questo tipo di utilizzo. Ci sono plugin che richiedono memcached, APC, ecc., quindi questo potrebbe richiedere solo un webserver basato su eventi. Questo è un requisito di backend, mpm-prefork e mpm-worker non sono adatti per questo.

Un'altra potenziale soluzione è utilizzare un provider di web socket di terze parti. Ho sperimentato un po' con Pusher (http://pusher.com/), c'è un'API a cui puoi collegarti che potrebbe funzionare bene per quello che stai cercando di fare. Ho riflettuto su come potrei utilizzarlo nei miei siti WordPress.
Un possibile svantaggio è che altre persone che provano a usare il tuo plugin dovrebbero anche loro ottenere un account Pusher per farlo funzionare. È molto più semplice da usare rispetto all'installazione e manutenzione di un proprio server Web Sockets, e questo rappresenterebbe invece un vantaggio per gli altri utenti che provano a utilizzare il tuo plugin.

La risposta breve è: sì, è fattibile. Potrei valutare qualcosa di più distribuito rispetto a un singolo VPS, che rappresenta un punto unico di guasto che gestisci tu. Forse potresti considerare alcuni sistemi EC2 con bilanciamento del carico o simili? (Presumo che tu abbia un flusso di entrate che ti permetta di permetterti tali comodità. sorriso)
