¿Se puede hacer que WordPress sea compatible con websockets?

15

Websockets es una tecnología novedosa y de vanguardia envuelta en HTML5. Básicamente, puede abrir un websocket para habilitar la comunicación bidireccional persistente con un servidor web. El cliente (interfaz de usuario) puede enviar mensajes de forma espontánea, y el servidor también puede enviar mensajes.

Tecnología existente (JavaScript) requiere que el cliente inicie todo: el servidor no puede enviar nada. al cliente que el cliente no ha solicitado. Por lo tanto, los scripts deben actualizarse constantemente y volver a solicitar datos que podrían no haber cambiado. Los websockets funcionan más " push " y permiten que los nuevos datos bajen por el canal siempre.

Desafortunadamente, la mayoría de las implementaciones de websocket (todas las que puedo encontrar) requieren una aplicación de servidor específica para funcionar. La gente ejecutará Apache en los puertos 80 y 443 (http y https) y ejecutará otro sistema (normalmente Node.js) en otro puerto (es decir, 8000 u 8080) para manejar las solicitudes de websocket.

Esto funciona, obviamente, pero tiene algunos inconvenientes.

Tengo un complemento que quiero compilar que enormemente se beneficiaría del uso de websockets dentro de WordPress. Pero si un usuario necesita instalar un segundo servidor web (generalmente imposible para las personas con alojamiento compartido), entonces no funcionará como un complemento.

Entonces, para cualquiera de ustedes que tenga experiencia, ¿cómo haría WordPress compatible con websockets? ¿Haría que WordPress se encargara de la comunicación en sí, o incorporara otro script de mini-servidor en el complemento? Si ya lo has hecho, ¿cómo lo lograste sin romper WordPress?

Posibles recursos?

21/09/11 Actualización

Hablando de cómo Apache (el servidor más comúnmente instalado para ejecutar WP en un host compartido) no puede manejar los websockets de forma nativa, me pregunto por una alternativa. Varios complementos (JetPack, por ejemplo) hablan con un servicio externo o API para generar contenido.

Stats solicita contenido de Automattic. Akismet envía datos desde y hacia un servidor externo. Después de la fecha límite envía el contenido en el momento de la publicación. Algunas herramientas de SEO pasan cosas de un lado a otro a través de sistemas externos.

Entonces, como alternativa al alojamiento del código websocket dentro de un complemento de WordPress, ¿sería factible alojar un servicio websocket en una ubicación central y tener un interfaz de WordPress que interactúe con eso?

    
pregunta EAMann 19.09.2011 - 20:36

5 respuestas

7

WebSockets utiliza el protocolo websockets: WS: /example.com/yourscript.js y abre una conexión síncrona, lo que significa que la conexión se mantiene abierta y dedicada al navegador.

enlace

Como puede imaginar, mantener las conexiones abiertas entre el navegador y el servidor dedica más recursos del servidor a cada conexión del navegador y, por lo tanto, es más exigente para los recursos del servidor que eliminar las conexiones después de cada solicitud. Comprensiblemente, los proveedores de alojamiento compartido no están dispuestos a admitir WS en el alojamiento compartido.

Aunque ciertos hosts compartidos pueden tener instalado mod_python, lo que permite a los usuarios de su complemento ejecutar pywebsocket , la documentación propia de pywebsocket es clara declara que "pywebsocket está diseñado para fines de prueba o experimentales".

Entonces, mientras uno puede imaginar un plugin que agrupa código python para crear un servidor pywebsocket, dado un servidor apache que lo admite, no creo que sea razonable distribuir un plugin que lo hiciera.

    
respondido por el marfarma 19.09.2011 - 22:27
3

En respuesta a su actualización, en mi opinión y en base a la investigación que he realizado, esa sería la mejor opción. Aún mejor sería crear el complemento de front-end y crear el servicio websocket externo para hablar con los complementos, y cobrar una tarifa por él para que pueda monetizar su idea, si así lo desea. Incluso podría proporcionar el código fuente para el servicio websocket y crear una configuración en el complemento para establecer dónde (qué dominio / IP y puerto) se encuentra el servicio websocket.

    
respondido por el user15143 13.04.2012 - 07:06
2

Olvida el apache2 "clásico" - apache2-mpm-prefork - para este propósito. Tal vez apache2-mpm-event podría manejar esto, pero es experimental. Dado que apache2 no está controlado por eventos, el problema descrito por @marfarma existe. Necesitará un servidor web controlado por eventos para este tipo de servicio, por ejemplo, cherokee o nginx.

nginx puede ser un beneficio real para WordPress (ya que wordpress.com lo usa como su servidor también), y puede ser proxy especificado solicitudes a un servicio node.js por ejemplo.

Algunos ejemplos en el tema:

También hice un pequeño tutorial para nginx + php-fpm + wordpress setup .

    
respondido por el petermolnar 20.09.2011 - 08:04
1

Otra solución potencial es usar un proveedor de sockets web de terceros, he jugado un poco con Pusher (http://pusher.com/) un poco, hay una API que puede aprovechar que podría funcionar bien por lo que estas tratando de hacer He estado contemplando cómo podría usarlo en mis propios sitios de WordPress.

Una posible desventaja es que otras personas que intentan usar su complemento también tendrían que obtener una cuenta de Pusher para que funcione. Es mucho más fácil trabajar con él que instalar su propio servidor Web Sockets y tener que mantenerlo, eso sería realmente una ventaja cuando se trata de otros que intentan usar su complemento.

    
respondido por el Rick Curran 21.09.2011 - 23:46
0

La respuesta corta es: sí, es posible. Sin embargo, podría buscar algo un poco más distribuido que un único VPS de punto de falla que usted hospeda. Tal vez mirar en algunos sistemas EC2 de carga equilibrada o algo así? (Supongo que tiene un flujo de ingresos para proporcionar tales conveniencias. sonríe )

    
respondido por el ZaMoose 21.09.2011 - 21:22

Lea otras preguntas en las etiquetas