¿Se puede hacer que WordPress soporte websockets?
Websockets son una tecnología moderna incluida en HTML5. Básicamente, puedes abrir un websocket para permitir comunicación persistente y bidireccional con un servidor web. El cliente (interfaz de usuario) puede enviar mensajes espontáneamente, y el servidor también puede enviar mensajes.
Tecnologías existentes (JavaScript) requieren que todo sea iniciado por el cliente - el servidor no puede enviar nada al cliente que este no haya solicitado. Por lo tanto, los scripts necesitan estar constantemente actualizando y volviendo a solicitar datos que podrían no haber cambiado. Los websockets funcionan más en una base de "push" y permiten que nuevos datos lleguen cuando sea necesario.
Desafortunadamente, la mayoría (todas las que he encontrado) de implementaciones de websockets requieren una aplicación de servidor específica para funcionar. Las personas ejecutan Apache en los puertos 80 y 443 (http y https) y otro sistema (típicamente Node.js) en otro puerto (ej. 8000 o 8080) para manejar solicitudes de websocket.
Esto funciona, obviamente, pero tiene algunas desventajas.
Tengo un plugin que quiero construir que se beneficiaría enormemente de usar websockets dentro de WordPress. Pero si un usuario necesita instalar un segundo servidor web (generalmente imposible para personas con hosting compartido), entonces no funcionaría como plugin.
Entonces, para aquellos con experiencia, ¿cómo harían compatible WordPress con websockets? ¿Harían que WordPress maneje la comunicación por sí mismo, o incluirían otro mini-servidor dentro del plugin? Si ya lo han hecho, ¿cómo lo lograron sin romper WordPress?
¿Recursos posibles?
Actualización 21/9/11
Con toda la discusión sobre cómo Apache (el servidor más comúnmente instalado para ejecutar WP en hosting compartido) no puede manejar websockets de forma nativa, me pregunto sobre una alternativa. Varios plugins (JetPack, por ejemplo) se comunican con un servicio externo o API para generar contenido.
Stats solicita contenido de Automattic. Akismet envía datos hacia y desde un servidor externo. After the Deadline envía contenido al momento de publicar. Algunas herramientas SEO pasan información a través de sistemas externos.
Entonces, como alternativa a alojar el código de websockets dentro de un plugin de WordPress, ¿sería factible alojar un servicio de websockets en una ubicación central y hacer que un frontend de WordPress interactúe con eso?

WebSockets utilizan el protocolo websockets: WS:/example.com/yourscript.js y abren una conexión sincrónica, lo que significa que la conexión se mantiene abierta y dedicada al navegador.
Los servidores httpd, como apache2 (utilizado por la mayoría de los proveedores de hosting compartido) usan el protocolo http: http://example.com/yourscript.js
y abren una conexión asíncrona, lo que significa que no se mantiene abierta una conexión entre el servidor y el navegador. (Puedes prolongar modestamente las conexiones abiertas configurando ciertos parámetros, pero en términos generales, es asíncrono).
Como puedes imaginar, mantener conexiones abiertas entre el navegador y el servidor dedica más recursos del servidor a cada conexión del navegador, y por lo tanto consume más recursos del servidor que cerrar las conexiones después de cada solicitud. Los proveedores de hosting compartido comprensiblemente no están inclinados a soportar WS en hosting compartido.
Aunque ciertos hosts compartidos pueden tener mod_python instalado, permitiendo así a los usuarios de tu plugin ejecutar pywebsocket, la documentación de pywebsocket afirma claramente que "pywebsocket está destinado para propósitos de prueba o experimentales".
Así que, aunque uno podría imaginar un plugin que incluya código python para crear un servidor pywebsocket, dado un servidor apache que lo soporte, no creo que sea razonable distribuir un plugin que haga eso.

En respuesta a tu actualización, en mi opinión y basado en la investigación que he realizado, esa sería la mejor opción. Sería incluso mejor crear un plugin para el frontend y un servicio externo de websocket para comunicarse con los plugins, y cobrar una tarifa por ello si deseas monetizar tu idea. Podrías incluso proporcionar el código fuente del servicio de websocket y crear un ajuste en el plugin para configurar dónde (qué dominio/IP y puerto) se encuentra el servicio de websocket.

Olvídate del "clásico" apache2 - apache2-mpm-prefork - para este propósito. Tal vez apache2-mpm-event podría manejarlo, pero es experimental. Dado que apache2 no está orientado a eventos, el problema descrito por @marfarma sí existe. Necesitarás un servidor web orientado a eventos para este tipo de servicio, por ejemplo cherokee o nginx.
nginx puede ser un beneficio real para WordPress (ya que wordpress.com también lo utiliza como su servidor), y puede redirigir solicitudes específicas a un servicio node.js, por ejemplo.
Algunos ejemplos en el tema:
También hice un pequeño tutorial para la configuración de nginx + php-fpm + wordpress.

Olvidarse del enfoque "clásico" no es realmente una opción para producir un plugin fácil de instalar para usuarios comunes. Sí, usar nginx, cherokee o node.js para servir contenido desde el servidor es una opción, pero no puedes simplemente poner eso en el readme de un plugin y esperar que los usuarios a) lo entiendan o b) sean capaces de hacer algo al respecto.

apache2-mpm-prefork no fue diseñado para poder manejar este tipo de uso. Hay plugins que requieren memcached, APC, etc., por lo que esto solo podría requerir un servidor web basado en eventos. Este es un requisito del backend, mpm-prefork y mpm-worker no son para esto.

Otra solución potencial es utilizar un proveedor de web sockets de terceros. He estado experimentando un poco con Pusher (http://pusher.com/), tienen una API a la que puedes conectarte y que podría funcionar bien para lo que intentas hacer. He estado considerando cómo podría utilizarlo en mis propios sitios WordPress.
Una posible desventaja es que otras personas que intenten usar tu plugin también tendrían que obtener una cuenta de Pusher para que funcione. Es mucho más fácil de usar que instalar tu propio servidor de Web Sockets y tener que mantenerlo, lo que en realidad sería una ventaja cuando se trata de que otros intenten usar tu plugin.

La respuesta corta es: sí, es factible. Sin embargo, consideraría algo un poco más distribuido que un único VPS que hospedas tú mismo y que representa un punto único de fallo. Quizás valdría la pena explorar sistemas EC2 con balanceo de carga o algo similar. (Asumo que tienes un flujo de ingresos que te permite costear estas comodidades. sonrisa)
