Ein Chat-Server/Chat-System, das auf AMQP-Protokoll (Rabbitmq Message Broker) basiert, geschrieben in Python mit Tornado und Rabbitmq.
Link: http://rabbitchat.readthedocs.io/en/latest/index.html
Link: https://pypi.python.org/pypi/rabbitchat
| Autor: | Anirban Roy Das |
|---|---|
| E-Mail: | [email protected] |
| Urheberrecht (c): | 2017, Anirban Roy Das <[email protected]> |
Überprüfen Sie rabbitChat/LICENSE für die vollständige Copyright -Mitteilung.
Rabbitchat ist ein sehr einfacher Chat -Server, der lokal eingerichtet werden kann, um in Ihrem LAN zu chatten. Es unterstützt sowohl den öffentlichen Chat unter allen Teilnehmern, die gleichzeitig zu einem bestimmten Zeitpunkt verbunden sind als auch private Chat zwischen diesen einzelnen Teilnehmern.
Es verwendet das AMQP -Protokoll, um das Echtzeit -Message -Passing -System zu implementieren. AMQP wird in vielen Sprachen und in vielen Software implementiert, sobald Rabbitmq, ein Nachrichtenbroker, der das AMQP -Protokoll implementiert.
Die Verbindung wird mit dem Sockjs -Protokoll erstellt. Sockjs ist in vielen Sprachen implementiert, hauptsächlich in JavaScript, um mit den Servern in Echtzeit zu sprechen, was versucht, eine Duplex-bidirektionale Verbindung zwischen dem Client (Browser) und dem Server zu erstellen. Der Server sollte auch das Sockjs -Protokoll implementieren. Verwenden der Sockjs-Tornado-Bibliothek, die das SockJS -Protokoll auf dem Tornado-Server enthüllt.
Es versucht zunächst, eine WebSocket-Verbindung zu erstellen, und wenn sie fehlschlägt, fällt es auf andere Transportmechanismen wie Ajax , lange Umfragen usw. zurück. Nachdem die Verbindung hergestellt wurde, ist der Tornado-Server ** (Sockjs-Tornado) ** eine Verbindung zu Rabbitmq über AMQP-Protokoll mit der AMQP Python Client Library , PIKA, PIKA.
Somit ist die Verbindung Webbrowser zu Tornado zu Rabbitmq und umgekehrt.
| Sockjs-Client: | Erweiterter WebSocket JavaScript -Client |
|---|---|
| Tornado: | Async Python Web Library + Web Server |
| Sockjs-Tornado: | SockJS WebSocket Server -Implementierung für Tornado |
| Amqp: | Vorabmeldungswarteschlangenprotokoll, die in messgerikten Middleware verwendet wird |
| Pika: | AMQP Python Client Library |
| Rabbitmq: | Ein Message Broker, der AMQP implementiert |
| PyTest: | Python -Testbibliothek und Testläufer mit fantastischer Testdiscobery |
| PyTest-Flask: | PyTest -Plugin für Flask -Apps, um Fask -Apps mithilfe der PyTest -Bibliothek zu testen. |
| Ubers Test-Double: | Testen Sie die Doppelbibliothek für Python, eine gute Alternative zur Scheinbibliothek |
| Jenkins (optional): | Ein selbst gehosteter CI-Server |
| Travis-ci (optional): | Ein gehosteter CI-Server kostenlos für Open-Source-Projekte |
| Docker: | Ein Containerisierungstool für bessere DevOps |
Es gibt zwei Arten von Installation. Eine, die Rabbitchat als Binärdatum durch Installaing von PIP und die Anwendung in der lokalen Maschine direkt ausführt. Eine andere Methode ist die Ausführung der Anwendung von Docker. Daher ein weiterer Satz von Installationsschritten für den Docker -Anwendungsfall.
Um geheime und vertrauliche Datenleckage über Ihre Git-Commits für öffentliche Github-Repo zu schützen, überprüfen Sie git-secrets .
Dieses Git Secrets -Projekt hilft bei der Verhinderung der sezernigen Leckage versehentlich.
Sehen Sie, es werden so viele Technologien verwendet, die in den technischen Spezifikationen erwähnt werden, und dennoch sind die Abhängigkeiten nur zwei. Dies ist die Kraft des Dockers.
Schritt 1 - Docker installieren
Folgen Sie meinem anderen Github -Projekt, bei dem alles, was mit DevOps und Skripten zusammenhängt, erwähnt wird und eine Entwicklungsumgebung zur Verwendung von Docker eingerichtet wird.
- Projekt: https://github.com/anirbanroydas/devops
Schritt 2 - Installation machen
# (Mac OS) $ Brew Install Automake # (Ubuntu) $ sudo apt-Get-Update $ sudo apt-get install make
Schritt 3 - Abhängigkeiten installieren
Installieren Sie die folgenden Abhängigkeiten von Ihrem lokalen Entwicklungsgerät, die in verschiedenen Skripten verwendet werden.
$ pip Installieren Sie Rabbitchat
Wenn die obigen Abhängigkeiten nicht durch den obigen Befehl installiert werden, verwenden Sie die folgenden Schritte, um sie einzeln zu installieren.
Schritt 1 - PIP installieren
Befolgen Sie die folgenden Methoden zur Installation von PIP. Einer von ihnen kann Ihnen helfen, PIP in Ihrem System zu installieren.
- Methode 1 - https://pip.pypa.io/en/stable/installing/
- Methode 2- http://ask.xmodulo.com/install-pip-linux.html
- Methode 3 - Wenn Sie Python unter Mac OS X über
brew install pythoninstalliert haben, ist PIP bereits zusammen mit Python installiert.Schritt 2 - Tornado installieren
$ pip Installieren Sie TornadoSchritt 3 - Installieren Sie Sockjs -Tornado
$ pip Installieren Sie Sockjs-TornadoSchritt 4 - Pika installieren
$ pip pika installierenSchritt 5 - Installieren Sie Rabbitmq
Für
Mac-Benutzer1. Brew Installieren Sie Rabbitmq
$ Brew Install Rabbitmq
- Konfigurieren Sie Rabbitmq und folgen Sie diesem Link, diesem und diesem.
Für
Ubuntu/Linux-Benutzer1. Aktivieren Sie Rabbitmq Application Repository
$ echo "deb http://www.rabbitmq.com/debian/ testen main" >> /etc/apt/sources.list2. Fügen Sie den Überprüfungsschlüssel für das Paket hinzu
$ WGet -o http://www.rabbitmq.com/rabbitmq-ning-key-public.asc | sudo apt -key add -3. Aktualisieren Sie die Quellen mit unserem Neuzugang von oben
$ APT-Get-Update4. und schließlich laden Sie Rabbitmq herunter und installieren Sie sie
$ sudo apt-Get Installieren Sie Rabbitmq-Server
- Konfigurieren Sie Rabbitmq und folgen Sie diesem Link, diesem und diesem.
Wenn Sie das Projekt in einem CI -Setup (wie Travis, Jenkins) verwenden, können Sie bei jedem Drücken nach Github Ihre Travis Build- oder Jenkins -Pipeline einrichten. Travis wird die Datei .travis.yml verwenden und Jenknis wird die Jenkinsfile verwenden, um ihre Arbeit zu erledigen. Wenn Sie Travis verwenden, führen Sie nun die Travis -spezifischen Setup -Befehle aus und führen Sie für Jenkins zuerst die Jenkins -spezifischen Setup -Befehle aus. Sie können auch beide verwenden, um zwischen der Leistung zu vergleichen.
Die Setup -Tasten lesen die Werte aus einer .env -Datei, in der alle Umgebungsvariablen exportiert sind. Sie werden jedoch eine Beispiel env -Datei und keine .env -Datei bemerken. Stellen Sie sicher, dass Sie die env -Datei in .env kopieren und die tatsächlichen Variablen mit Ihren realen Werten ändern/ändern .
Die .env -Dateien werden nicht zu Git verpflichtet, da sie in der Datei .gitignore erwähnt werden, um ein Leck vertraulicher Daten zu verhindern.
Nachdem Sie die Setup -Befehle ausgeführt haben, erhalten Sie eine Reihe sicherer Schlüssel. Kopieren Sie diese in Ihre Konfigurationsdateien, bevor Sie fortfahren.
Hinweis: Dies ist ein einmaliges Setup. Hinweis: Überprüfen Sie die Setup -Skripte in den scripts/ Verzeichnissen, um zu verstehen, welche Umgebungsvariablen sind, deren verschlüsselte Schlüssel bereitgestellt wird. HINWEIS: Vergessen Sie nicht, die sicheren Schlüssel zu Ihrem .travis.yml oder Jenkinsfile zu kopieren
Hinweis: Wenn Sie die Kopie von env in .env Datei nicht durchführen und die Variablenwerte in .env mit Ihren realen Werten ändern möchten, können Sie einfach das Skript von travis-setup.sh oder jenknis-setup.sh bearbeiten und die Werte direkt aktualisieren. Die Skripte befinden sich im Verzeichnis von scripts/ Projektebene.
WICHTIG: Sie müssen das Skript travis-setup.sh oder das Skript jenkins-setup.sh in Ihrem lokalen Computer ausführen, bevor Sie an Remote Server bereitgestellt werden.
Diese Schritte verschlüsseln Ihre Umgebungsvariablen, um Ihre vertraulichen Daten wie API -Tasten, Docker -basierte Schlüssel und Bereitstellung bestimmter Tasten zu sichern.
$ make Travis-Setup
Diese Schritte verschlüsseln Ihre Umgebungsvariablen, um Ihre vertraulichen Daten wie API -Tasten, Docker -basierte Schlüssel und Bereitstellung bestimmter Tasten zu sichern.
$ machen Jenkins-Setup
Es gibt zwei Arten von Nutzung. Eine, die Rabbitchat als Binärdatum durch Installaing von PIP und die Anwendung in der lokalen Maschine direkt ausführt. Eine andere Methode ist die Ausführung der Anwendung von Docker. Daher eine Reihe von Nutzungsschritten für den Docker -Anwendungsfall.
Nachdem die oben genannten Abhängigkeiten installiert wurden und die optionale (falls nicht Verwendung eines CI -Servers) oder erforderlich (falls ein CI -Server verwendet werden), führen Sie einfach die folgenden Befehle aus, um sie zu verwenden:
Sie können die App in Ihrem lokalen Entwicklungsgerät ausführen und testen oder direkt in einem Remote -Computer ausführen und testen. Sie können auch in einer Produktionsumgebung laufen und testen.
Die folgenden Befehle beginnen alles in der Entwicklungsumgebung. Um in einer Produktionsumgebung zu beginnen, suffix -prod für jeden Befehl .
Wenn beispielsweise der normale Befehl make start ist, verwenden Sie für die Produktionsumgebung make start-prod . Führen Sie diese Änderung zu jedem Befehl vor, den Sie in der Produktionsumgebung ausführen möchten.
Ausnahmen: Sie können die obige Methode nicht für Testbefehle verwenden. Testbefehle sind für jede Umgebung gleich. Auch der Befehl make system-prune ist eigenständig ohne produktionsspezifische Variation (bleibt in allen Umgebungen gleich).
Anwendung starten
$ sauber machen $ make build $ Start machen # ODER $ docker -compose up -d
Beantragung der Anwendung
$ mach Stop # ODER $ docker-compose stop
Anwendung entfernen und reinigen
$ sauber machen # ODER $ docker -compose rm -Force -v $ echo "y" | Docker -Systembetrieb
Sauberes System
$ make system-prune # ODER $ echo "y" | Docker -Systembetrieb
So überprüfen Sie die gesamten Anwendungsprotokolle
$ Machen Sie Checklogs # ODER $ docker-compos-Protokolle--Follow-tail = 10
Um nur die Protokolle der Python -App zu überprüfen
$ make Check-Logs-App # ODER $ docker-compose-Protokolle--Follow--tail = 10 identidock
Nachdem er Rabbitchat über PIP installiert hatte, rennen Sie nur die folgenden Befehle, um es zu verwenden:
Rabbitmq Server
1. Für Mac -Benutzer
# Normalerweise starten $ Rabbitmq-Server # Wenn Sie im Hintergrund laufen möchten $ RABBITMQ-SERVER-DETACHED # Brew Rervices beginnen (funktioniert nicht mit TMUX) $ Brew Services Rabbitmq Start
2. Für Ubuntu/LInux -Benutzer
# Normalerweise starten $ Rabbitmq-Server # Wenn Sie im Hintergrund laufen möchten $ RABBITMQ-SERVER-DETACHED # Um den Service zu nutzen $ Service Rabbitmq-Server-Start # Um den Service nicht mehr zu nutzen $ Service Rabbitmq-Server Stop # Mit dem Dienst neu starten $ Service Rabbitmq-Server Neustart # Um den Status zu überprüfen $ Service Rabbitmq-Server-Status
Starten Sie den Rabbitchat -Server
$ rabbitchat [Optionen]
Optionen
| --Hafen: | Portnummer, bei der der Chat -Server startet |
|---|
Beispiel
$ Rabbitchat -Port = 9191
Stoppen Sie den Rabbitchat -Server
Klicken Sie auf Ctrl+C um den Server zu stoppen.
HINWEIS: Das Testen erfolgt nur mit der Docker -Methode. Wie auch immer, es sollte keine Rolle spielen, ob Sie Ihre Anwendung mithilfe der Docker -Methode oder der eigenständigen Methode ausführen. Tests sind unabhängig davon.
Testen sind nun das Hauptvertrag des Projekts. Sie können in vielerlei Hinsicht testen, nämlich die in den folgenden Befehlen erwähnten make , die alles automatisieren, und Sie müssen nichts anderes docker , tox . Nichts muss bekannt sein.
Auf der anderen Seite können Sie sie direkt ausführen, wenn Sie die Fine-Steuer über die Tests möchten, entweder durch Verwendung von pytest -Befehlen oder über tox -Befehle, um sie in verschiedenen Python-Umgebungen oder mit docker-compose -Befehlen auszuführen, um verschiedene Tests auszuführen.
Das Ausführen der Make -Befehle ist jedoch Gesetze, die zur Strategie gehen und den Ansatz für dieses Projekt empfehlen.
Hinweis: Tox kann direkt verwendet werden, wo docker -Container nicht verwendet werden. Obwohl wir versuchen können, tox in unseren Testkontianern auszuführen, die wir für das Ausführen der Tests mithilfe der make -Befehle verwenden, müssten wir die Dockerfile ändern und docker python -Abhängigkeiten wie python2.7 installieren, python3.x und dann führen Sie tox pytest aus.
Einschränkung: Die einzige Einschränkung der direkten Verwendung der Befehle machen und nicht tox verwendet. Wir testen das Projekt nur in einer einzelnen python -Umgebung, Nameley python 3.6 .
Alles testen
$ Test machen
Jede andere Methode ohne Verwendung besteht darin, viele Befehle zu schreiben. Verwenden Sie also den Befehl make bevorzugt
Unit -Tests durchführen
$ make testeinit
Komponententests durchführen
$ make test component
Vertragstests durchführen
$ make Test-Contract
Integrationstests durchführen
$ Testintegration machen
Um End -to -End (E2E) oder System- oder UI -Akzeptanz oder Funktionstests durchzuführen
$ make test-e2e # ODER $ make Test-System # ODER $ test-Ui-Akzeptanz machen # ODER $ make test-funktional