Un servidor de chat-chat-chat basado en el protocolo MQTT utilizando Mosquitto Broker, Tornado como servidor web, Sockjs en la Biblioteca JavaScript lateral del cliente (navegador), Sockjs-tornado como implementación de Sockjs en el lado del servidor y paho-mqtt (cliente MQTT python).
Enlace: http://mosquittochat.readthedocs.io/en/latest/
Enlace: https://pypi.python.org/pypi/mosquittochat
| Autor: | Anirban Roy Das |
|---|---|
| Correo electrónico: | [email protected] |
| Copyright (c): | 2017, Anirban Roy Das <[email protected]> |
Consulte el archivo de mosquittoChat/LICENSE para obtener un aviso completo de derechos de autor.
Mosquittochat es un servidor de chat simple basado en el protocolo MQTT que se puede configurar localmente para chatear en su LAN. Apoya a ambos chat público entre todos los participantes conectados simultáneamente en un momento particular y también chat privado entre esos participantes individuales.
Utiliza el protocolo MQTT para implementar el sistema de aprobación de mensajes en tiempo real. MQTT se implementa en muchos idiomas y en muchos softwares, uno de esos es Mosquitto, que es un corredor de mensajes que implementa el protocolo MQTT.
La conexión se crea utilizando el protocolo SockJS. SockJS se implementa en muchos idiomas, principalmente en JavaScript para hablar con los servidores en tiempo real, lo que intenta crear una conexión bidireccional dúplex entre el cliente (navegador) y el servidor . El servidor también debe implementar el protocolo SockJS . Usando así la biblioteca Sockjs-tornado que expone el protocolo Sockjs en el servidor Tornado.
Primero intenta crear una conexión WebSocket, y si falla, entonces se vuelve a ver a otros mecanismos de transporte, como AJAX , sondeo largo , etc. Después de establecer la conexión, el servidor Tornado ** (Sockjs-tornado) ** se conecta a mosquitto a través del protocolo MQTT utilizando la biblioteca Mqtt Python Client , paho-MQTT.
Por lo tanto, la conexión es el navegador web para Tornado a Mosquitto y viceversa.
| Sockjs-Client: | Cliente avanzado de WebSocket JavaScript |
|---|---|
| Tornado: | Biblioteca web de Async Python + servidor web |
| Sockjs-tornado: | Implementación del servidor de Sockjs WebSocket para Tornado |
| MQTT: | Protocolo de conectividad de máquina a máquina (M2M)/"Internet de las cosas" |
| paho-mqtt: | Biblioteca de clientes MQTT Python |
| Mosquitto: | Un corredor de mensajes que implementa MQTT en C |
| Pytest: | Biblioteca de prueba de Python y corredor de prueba con Awesome Test Discobery |
| Pytest-Flask: | Pytest Plugin para aplicaciones Flask, para probar aplicaciones FASK con la biblioteca Pytest. |
| La prueba de Uber-Double: | Pruebe la biblioteca doble para Python, una buena alternativa a la biblioteca simulada |
| Jenkins (opcional): | Un servidor CI autohostado |
| Travis-CI (opcional): | Un servidor CI alojado gratis para proyectos de código abierto |
| Estibador: | Una herramienta de contenedorización para mejores devops |
Hay dos tipos de instalación. Uno que usa Rabbitchat como binario instalando desde PIP y ejecutando la aplicación en la máquina local directamente. Otro método es ejecutar la aplicación desde Docker. Por lo tanto, otro conjunto de pasos de instalación para el caso de uso de Docker.
Para proteger la filtración de datos secretos y confidenciales a través de su Git se compromete al repositorio público de GitHub, verifique git-secrets .
Este proyecto Git Secrets ayuda a prevenir la fuga de secreto por error.
Mira, hay tantas tecnologías utilizadas en las especificaciones tecnológicas y, sin embargo, las dependencias son solo dos. Este es el poder de Docker.
Paso 1 - Instalar Docker
Siga mi otro proyecto GitHub, donde se menciona todo lo relacionado con DevOps y scripts junto con la configuración de un entorno de desarrollo para usar Docker.
- Proyecto: https://github.com/anirbanroydas/devops
Paso 2 - Instalar Make
# (Mac OS) $ brew install automake # (Ubuntu) $ sudo apt-get actualización $ sudo apt-get install make
Paso 3 - Instalar dependencias
Instale las siguientes dependencias en su máquina de desarrollo local que se utilizará en varios scripts.
$ PIP Instalar mosquittochat
Si las dependencias anteriores no son instaladas por el comando anterior, use los pasos a continuación para instalarlas uno por uno.
Paso 1 - Instale PIP
Siga los siguientes métodos para instalar PIP. Uno de ellos puede ayudarlo a instalar PIP en su sistema.
- Método 1 - https://pip.pypa.io/en/stable/installing/
- Método 2- http://ask.xmodulo.com/install-pip-linux.html
- Método 3: si instaló Python en Mac OS X a través de
brew install python, entonces PIP ya está instalado junto con Python.Paso 2 - Instale Tornado
$ pip install tornadoPaso 3 - Instale Sockjs -Tornado
$ pip install sockjs-tornadoPaso 4 - Instale paho -mqtt
$ Pip Instale Paho-MqttPaso 5 - Instale Mosquitto
Para usuarios
Mac1. Brew instalar mosquitto
$ brew install mosquitto
- Configure Mosquitto, modificando el archivo en
/usr/local/etc/mosquitto/mosquitto.conf.Para usuarios de
Ubuntu/Linux
Habilitar el repositorio de mosquitto (opcional)
Primero intente directamente, si no funciona, siga este paso y continúe después de esto.:
$ sudo apt-add-repository PPA: mosquitto-dev/mosquitto-ppa2. Actualice las fuentes con nuestra nueva adición de arriba
$ apt-get actualización3. Y finalmente, descargue e instale mosquitto
$ sudo apt-get instalación mosquitto
- Configure Mosquitto, modificando el archivo en
/usr/local/etc/mosquitto/mosquitto.conf.
Si está utilizando el proyecto en una configuración de CI (como Travis, Jenkins), entonces, en cada empuje a GitHub, puede configurar su Travis Build o Jenkins Pipeline. Travis usará el archivo .travis.yml y Jenknis usará el Jenkinsfile para hacer su trabajo. Ahora, en caso de que esté utilizando Travis, ejecute los comandos de configuración específicos de Travis y para Jenkins ejecute los comandos de configuración específicos de Jenkins primero. También puede usar ambos para comparar entre su rendimiento.
Las claves de configuración leen los valores de un archivo .env que tiene todas las variables de entorno exportadas. Pero notará un archivo env de ejemplo y no un archivo .env . Asegúrese de copiar el archivo env a .env y cambie/modifique las variables reales con sus valores reales.
Los archivos .env no se comprometen a GIT, ya que se mencionan en el archivo .gitignore para evitar una filtración de datos confidenciales.
Después de ejecutar los comandos de configuración, se le presentará una serie de claves seguras. Copielos a sus archivos de configuración antes de continuar.
Nota: Esta es una configuración única. Nota: Verifique los scripts de configuración dentro de los scripts/ directorio para comprender cuáles son las variables de entorno cuyas teclas cifradas se proporcionan. Nota: No olvide copiar las claves seguras a su .travis.yml o Jenkinsfile
Nota: Si no desea hacer la copia de env a .env archivo y cambiar los valores variables en .env con sus valores reales, entonces puede editar el script travis-setup.sh o jenknis-setup.sh y actualizar los valores sus directamente. Los scripts están en el directorio de nivel de scripts/ proyecto.
IMPORTANTE: debe ejecutar el script travis-setup.sh o el script jenkins-setup.sh en su máquina local antes de implementarlo en un servidor remoto.
Estos pasos encriptarán sus variables de entorno para asegurar sus datos confidenciales como claves API, claves basadas en Docker, implementar claves específicas.
$ Make Travis-Setup
Estos pasos encriptarán sus variables de entorno para asegurar sus datos confidenciales como claves API, claves basadas en Docker, implementar claves específicas.
$ make jenkins-setup
Hay dos tipos de uso. Uno que usa Rabbitchat como binario instalando desde PIP y ejecutando la aplicación en la máquina local directamente. Otro método es ejecutar la aplicación desde Docker. De ahí otro conjunto de pasos de uso para el caso de uso de Docker.
Después de haber instalado las dependencias anteriores y ejecutar el paso de configuración de CI opcional (si no es no usar ningún servidor CI) o requerido (si usa algún servidor CI), simplemente ejecute los siguientes comandos para usarlo:
Puede ejecutar y probar la aplicación en su máquina de desarrollo local o puede ejecutar y probar directamente en una máquina remota. También puede ejecutar y probar en un entorno de producción.
Los siguientes comandos comenzarán todo en el entorno de desarrollo. Para comenzar en un entorno de producción, el sufijo -prod a cada comando hacer .
Por ejemplo, si el comando normal es make start , entonces para el entorno de producción, use make start-prod . Haga esta modificación a cada comando que desea ejecutar en el entorno de producción.
Excepciones: no puede usar el método anterior para los comandos de prueba, los comandos de prueba son los mismos para todos los entornos. Además, el comando make system-prune es independiente sin variación específica de producción (sigue siendo la misma en todos los entornos).
Iniciar aplicaciones
$ Make Clean $ Make Build $ haz comienza # O $ Docker -Compose Up -d
Aplicación de parada
$ Make Stop # O $ Docker-Compose Stop
Retirar y limpiar la aplicación
$ Make Clean # O $ docker -composo rm --force -v $ Echo "Y" | poda del sistema Docker
Sistema limpio
$ Make System-Prune # O $ Echo "Y" | poda del sistema Docker
Para verificar todos los registros de la aplicación
$ Make Chess-Logs # O $ Docker-Compose Logs --follow--tail = 10
Para verificar solo los registros de la aplicación Python
$ hacer chech-logs-app # O $ Docker-Compose Logs --follow--tail = 10 Identidock
Después de haber instalado MosquitTochat, simplemente ejecute los siguientes comandos para usarlo:
Servidor de mosquitto
1. Para los usuarios Mac
# Comienza normalmente $ mosquitto -c /usr/local/etc/mosquitto/mosquitto.conf # Si quieres ejecutar en segundo plano $ mosquitto -c /usr/local/etc/mosquitto/mosquitto.conf -d # Comience a usar los servicios de preparación (no funciona con TMUX, Athough, hay una solución, mencionada en una de las solicitudes y problemas de extracción) $ Brew Services Inicio Mosquitto
2. Para usuarios Ubuntu/LInux
# Comienza normalmente $ mosquitto -c /usr/local/etc/mosquitto/mosquitto.conf # Si quieres ejecutar en segundo plano $ mosquitto -c /usr/local/etc/mosquitto/mosquitto.conf -d # Para comenzar a usar el servicio $ SUDO SERVICIO MOSQUITO COMENZA # Para dejar de usar el servicio $ sudo Service Mosquitto Stop # Para reiniciar usando el servicio $ sudo servicio mosquitto reiniciar # Para verificar el estado $ Servicio Mosquitto Estado
Iniciar aplicaciones de mosquittochat
$ Mosquittochat [Opciones]
Opción
| --puerto: | Número de puerto donde comenzará el servidor de chat |
|---|
Ejemplo
$ Mosquittochat --port = 9191
Detener el servidor Mosquittochat
Haga clic en Ctrl+C para detener el servidor.
Nota: Las pruebas solo se realizan utilizando el método Docker. De todos modos, no debería importar si ejecuta su aplicación utilizando el método Docker o el método independiente. Las pruebas son independientes de ello.
Ahora, las pruebas son el trato principal del proyecto. Puede probar de muchas maneras, a saber, usar comandos make como se menciona en los siguientes comandos, que automatiza todo y no tiene que saber nada más, como qué biblioteca de prueba o marco se está utilizando, cómo están ocurriendo las pruebas, ya sea directamente o a través de contenedores docker , o puede ser diferentes entornos virtuales que usan tox . No se requiere nada que se sepa.
Por otro lado, si desea un control fino sobre las pruebas, puede ejecutarlas directamente, ya sea usando comandos pytest o mediante comandos tox para ejecutarlas en diferentes entornos de Python o utilizando comandos docker-compose para ejecutar pruebas DifferETN.
Pero ejecutar los comandos Make es Lawasy la estrategia y el enfoque recomendado para este proyecto.
Nota: La TOX se puede usar directamente, donde los contenedores docker no se utilizarán. Aunque podemos intentar ejecutar tox dentro de nuestros contagantes de prueba que estamos utilizando para ejecutar las pruebas usando los comandos make , pero luego tendríamos que cambiar el Dockerfile e instalar todas las dependencias python como python2.7 , python3.x y luego ejecutar los comandos tox desde el interior de los docker que luego ejecutan los comandos pytest que ahora ejecutamos para realizar nuestras pruebas dentro de los contenedores actuales.
Advertencia: la única advertencia de usar los comandos Make directamente y no usar tox es que solo estamos probando el proyecto en un solo entorno python , Nameley python 3.6 .
Para probar todo
$ Make Test
Cualquier otro método sin usar Make implicará escribir muchos comandos. Así que usa el comando Make de preferible
Para realizar pruebas unitarias
$ Make Test Unit
Para realizar pruebas de componentes
$ Make Test-Component
Para realizar pruebas de contrato
$ hacer prueba-contrato
Para realizar pruebas de integración
$ HACER ACTURA DE TRATA
Para realizar de extremo a extremo (E2E) o Sistema o aceptación de UI o pruebas funcionales
$ make test-e2e # O $ Make Test-System # O $ hacer test-ui-u-aceptación # O $ HACER Funcional de prueba