WebSockets – Lenguaje Python
Un WebSocket es un protocolo estándar para la transferencia de datos bidireccional entre un cliente y un servidor. El protocolo WebSockets no se ejecuta a través de HTTP, sino que es una implementación separada además de
TCP.
Contrata a un experto en Python para iniciar tu proyecto hoy mismo:
¿Por qué utilizar WebSockets?
Una conexión WebSocket permite la comunicación full-duplex entre un cliente y un servidor para que ambos lados puedan enviar datos al otro a través de una conexión establecida. La razón por la que WebSockets, junto con las tecnologías relacionadas de Eventos enviados por el servidor (SSE) y Canales de datos WebRTC, son importantes es que HTTP no está diseñado para mantener abierta una conexión para que el servidor envíe datos con frecuencia a un navegador web. Anteriormente, la mayoría de las aplicaciones web implementaban un sondeo largo a través de solicitudes frecuentes de JavaScript y XML asincrónico (AJAX), como se muestra en el siguiente diagrama.
La inserción del servidor es más eficiente y escalable que el sondeo prolongado porque el navegador web no tiene que solicitar actualizaciones constantemente a través de un flujo de solicitudes AJAX.
Si bien el diagrama anterior muestra un servidor que envía datos al cliente, WebSockets es una conexión full-duplex, por lo que el cliente también puede enviar datos al servidor como se muestra en el diagrama siguiente.
El enfoque de WebSockets para actualizaciones impulsadas por el servidor y el cliente funciona bien para ciertas categorías de aplicaciones web, como la sala de chat, por lo que suele ser una aplicación de ejemplo para una biblioteca WebSocket.
Implementación de WebSockets
Tanto el navegador web como el servidor deben implementar el protocolo WebSockets para establecer y mantener la conexión. Hay implicaciones importantes para los servidores, ya que las conexiones WebSockets son de larga duración, a diferencia de las conexiones HTTP típicas.
Un servidor multiproceso o multiproceso no se puede escalar adecuadamente para WebSockets porque está diseñado para abrir una conexión, manejar una solicitud lo más rápido posible y luego cerrar la conexión. Un servidor asincrónico como Tornado o Unicornio verde mono parcheado con gevent es necesario para cualquier implementación práctica de WebSockets en el lado del servidor.
En el lado del cliente, no es necesario utilizar una biblioteca JavaScript para WebSockets. Los navegadores web que implementan WebSockets expondrán toda la funcionalidad necesaria del lado del cliente a través del Objeto WebSockets.
Sin embargo, una biblioteca contenedora de JavaScript puede facilitar la vida de un desarrollador implementando una degradación elegante (a menudo recurriendo al sondeo largo cuando los WebSockets no son compatibles) y proporcionando una envoltura alrededor de las peculiaridades de WebSocket específicas del navegador. En una sección a continuación se muestran ejemplos de bibliotecas cliente de JavaScript e implementaciones de Python.
Proxying de Nginx WebSocket
Nginx admite oficialmente el proxy WebSocket a partir de
versión 1.3. Sin embargo, debe configurar los encabezados de actualización y conexión para asegurarse de que las solicitudes pasen a través de Nginx a su servidor WSGI. Puede ser complicado configurar esto la primera vez.
Aquí están los ajustes de configuración que utilizo en mi archivo Nginx como parte de mi proxy WebSockets.
# this is where my WSGI server sits answering only on localhost
# usually this is Gunicorn monkey patched with gevent
upstream app_server_wsgiapp {
server localhost:5000 fail_timeout=0;
}
server {
# typical web server configuration goes here
# this section is specific to the WebSockets proxying
location /socket.io {
proxy_pass http://app_server_wsgiapp/socket.io;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 600;
}
}
Tenga en cuenta que si tiene algún problema con la configuración de ejemplo anterior, querrá ampliar el documentación oficial del módulo proxy HTTP.
Los siguientes recursos también son útiles para configurar la configuración correctamente.
Implementaciones de Python WebSockets
Los siguientes proyectos implementan WebSockets en Python o proporcionan un código de ejemplo que puede seguir para usar WebSockets en sus propios proyectos.
- Autobahn utiliza Twisted y asyncio para crear el componente WebSockets del lado del servidor mientras
AutobahnJS asiste en el lado del navegador web del cliente. - Canales de Django está construido sobre WebSockets y es fácil de integrar con proyectos Django nuevos o existentes.
- Matraz-SocketIO es una extensión de Flask que se basa en eventlet o gevent para crear conexiones WebSockets del lado del servidor.
- cliente websocket
proporciona API de bajo nivel para WebSockets y funciona con Python 2 y 3. - Crossbar.io se basa en Autobahn e incluye un servidor separado para manejar las conexiones WebSockets si lo desea el desarrollador de la aplicación web.
Bibliotecas cliente de JavaScript
JavaScript se utiliza para crear el lado del cliente de la conexión WebSocket porque el cliente suele ser un navegador web. Si bien no necesita una de estas bibliotecas del lado del cliente para usar WebSockets, son útiles para minimizar la cantidad de código repetitivo para establecer y manejar sus conexiones.
- Socket.ioLa biblioteca de JavaScript del lado del cliente se puede utilizar para conectarse a una implementación de WebSockets del lado del servidor.
- web-socket-js es una implementación de WebSockets del lado del cliente basada en Flash.
- AutobahnJS asiste en el lado del navegador web del cliente.
Código de ejemplo para WebSockets en Python
Existen numerosas implementaciones basadas en Python para WebSockets, por lo que a veces es más fácil examinar un ejemplo para que pueda construir algo para su propio proyecto.
- El proyecto Flask-SocketIO tiene un aplicación web de chat
que muestra el envío de eventos generados por el servidor, así como la entrada de los usuarios a través de un cuadro de texto en un formulario. - los juego de nombres en código en tiempo real El código fuente es un ejemplo con todas las funciones del uso de WebSockets a través de Flask-SocketIO. También hay una
tutorial de varias partes que recorre el código. - los Python-websockets-ejemplo contiene código para crear una aplicación web simple que proporciona WebSockets usando Flask, Flask-SocketIO y gevent.
Recursos de WebSockets específicos de Python
Recursos generales de WebSockets
WebSockets tiene un amplio soporte de navegador y, por lo tanto, muchos marcos web en todos los principales lenguajes de programación tienen bibliotecas para facilitar la creación de conexiones WebSockets. Los siguientes recursos son guías generales y tutoriales que brindan un contexto para el protocolo sin entrar en la maleza de cómo usar WebSockets en Python.
Esta entrada tiene 0 comentarios