简体中文
Turms ist die fortschrittlichste Open-Source-Instant-Messaging-Engine für 100.000 bis 10 Millionen gleichzeitige Benutzer weltweit. Weitere Informationen finden Sie in der Turms-Dokumentation.
(Version der Demoserver: ghcr.io/turms-im/turms-admin:latest
, ghcr.io/turms-im/turms-gateway:latest
, ghcr.io/turms-im/turms-service:latest
)
turms-admin: http://playground.turms.im:6510
Sowohl das Konto als auch das Passwort lauten: guest
. (Das Konto darf Daten abfragen und hinzufügen, aber keine Daten aktualisieren und löschen.)
turms-gateway: http://playground.turms.im:10510 (Port für WebSocket-Zugriff) und http://playground.turms.im:11510 (Port für TCP-Zugriff)
turms-service (Admin-API in der Entwicklungsumgebung mit Unterstützung gefälschter Daten): http://playground.turms.im:8510
Prometheus: http://playground.turms.im:9090; Grafana: http://playground.turms.im:3000
Sie können jede turms-client-(java/js/swift)-Implementierung verwenden, um Anfragen an turms-gateway zu senden und mit anderen Benutzern zu interagieren.
Darüber hinaus wird Playground automatisch durch nur einen Befehl eingerichtet: ENV=dev,demo docker compose -f docker-compose.standalone.yml --profile monitoring up --force-recreate -d
Führen Sie die folgenden Befehle aus, um automatisch einen minimal lebensfähigen Cluster (einschließlich Turms-Gateway, Turms-Service und Turms-Admin) und seine abhängigen Server (MongoDB-Sharded-Cluster und Redis) einzurichten:
git clone --depth 1 https://github.com/turms-im/turms.git
cd turms
docker plugin install grafana/loki-docker-driver:latest --alias loki --grant-all-permissions
docker compose -f docker-compose.standalone.yml up --force-recreate
Nachdem der Cluster eingerichtet ist, können Sie turms-admin unter http://localhost:6510 besuchen und das Konto und das Passwort eingeben (standardmäßig turms
). Wenn Sie sich erfolgreich anmelden, bedeutet dies, dass der Turm-Cluster erfolgreich eingerichtet wurde.
Sie können auch die von Turms bereitgestellten Terraform-Module verwenden, um schnell Cloud-Dienste zu erwerben und einen Turms-Cluster einzurichten (standardmäßig werden Spot-Instanzen verwendet). Warten Sie nach dem Ausführen terraform apply
etwa 3 bis 15 Minuten (Alibaba Cloud ECS ruft Ghcr-Bilder nur langsam ab) und besuchen Sie dann http://<public IP>:6510
. Wenn Sie auf turms-admin zugreifen können, bedeutet dies, dass Der Turms-Cluster wurde erfolgreich aufgebaut.
(Hinweis: Mit den folgenden Befehlen werden automatisch Cloud-Dienste gekauft und die entsprechenden Gebühren von Ihrem Konto abgezogen.)
git clone --depth 1 https://github.com/turms-im/turms.git
cd turms/terraform/alicloud/playground
export ALICLOUD_ACCESS_KEY= < your_access_key >
export ALICLOUD_SECRET_KEY= < your_secret_key >
terraform init
terraform apply
Die Architektur von Turms hängt vom Fanout-Lesedesign zum Erstellen von Posteingängen (oder Nachrichtenzeitleisten) ab, und Turms unterstützt Push-Modelle, Pull-Modelle und Push-Pull-Modelle, um über Änderungen von Geschäftsdaten informiert zu sein (Einzelheiten finden Sie unter „Business Data Change Awareness“) ). Die meisten anderen Designdetails stammen ebenfalls aus kommerziellen IM-Projekten.
Und im Vergleich zu vielen Projekten mit veralteten Technologie-Stacks ist Turms auch die einzige Open-Source-IM-Lösung, die auf moderner Architektur und moderner Technologie basiert und für mittlere bis große Anwendungen geeignet ist.
Darüber hinaus ist Architekturdesign eine Kunst des Kompromisses. Bei manchen IM-Produkten steht der große Funktionsumfang auf dem Preis, dass mittlere bis große Anwendungen nicht unterstützt werden (sie sind nur für die Teamkommunikation geeignet). Allerdings legt Turms höchste Priorität auf extreme Leistung und unterstützt vollständige (anstelle umfangreicher) IM-Funktionen zur Unterstützung mittlerer und großer Anwendungen. Weitere Informationen finden Sie unter Turms Schema Design and Observability.
Wenn Sie Turms hinsichtlich der Funktionen mit anderen Open-Source-IM-Projekten vergleichen müssen, können Sie Turms zunächst mit anderen Open-Source-IM-Projekten vergleichen, die auf den folgenden Funktionen von Turms basieren. Normalerweise gibt es Unterschiede zwischen professionellen IM-Projekten und Amateur-IM-Projekten. Darüber hinaus haben wir im Kapitel Product Comparison
auch die Mängel des Turms-Projekts als Referenz erwähnt.
Hinweis: Der Hauptnachteil des aktuellen Turms-Projekts besteht darin, dass es keine Unterstützung für Wohn-/Chatrooms bietet. Die technische Umsetzung des Wohn-/Chatrooms ist nicht schwierig, aber die Produktanforderungen, Qualitätsattributanforderungen und restriktiven Bedingungen unterscheiden sich deutlich von den Szenarien allgemeiner sozialer Anwendungen, sodass die erste Version von Turms keine Unterstützung dafür bietet. Darüber hinaus ist Turms auch nicht für Kommunikationsszenarien kleiner Unternehmen geeignet. Die Verwendung von Turms für Unternehmenskommunikationsszenarien bedeutet, mit einem Vorschlaghammer eine Nuss zu knacken, da bei der Unternehmenskommunikation eher funktionsreiche als extreme Leistung im Vordergrund steht, was nicht mit den Zielen von Turms vereinbar ist, weshalb auch ihre Designs unterschiedlich sind. Wenn Sie Unternehmenskommunikationsszenarien unterstützen möchten, müssen Sie selbst auf Basis von Turms entwickeln.
Beobachtbares System (Einzelheiten finden Sie unter Beobachtbarkeit)
Protokoll (für Ereignisse): Turms bietet drei Arten von Protokollen: Überwachungsprotokoll, Geschäftsprotokoll und Statistikprotokoll
Metriken (für aggregierbare Daten). Es spiegelt den Echtzeitstatus der System- und Geschäftsdaten wider
Nachverfolgung
Beachten Sie, dass der Turms-Server mehr Überwachungsfunktionen bereitstellt, die so effizient wie möglich implementiert werden können, jedoch nicht einige allgemeine Funktionen bereitstellt, die einen großen Einfluss auf die Leistung haben und besser für die Bereitstellung von Diensten Dritter (z. B. DAU) geeignet sind. . Für diese Art von erweiterten Funktionen können Sie sie durch Offline- oder Echtzeitanalyse der Protokolle oder Metriken von Turms-Servern implementieren.
Extreme Leistung Wir versuchen stets, extreme Leistung bei der Umsetzung aller Geschäftsabläufe zu erzielen. Einzelheiten entnehmen Sie bitte dem Quellcode.
Name | Zusammenfassung |
---|---|
Türme-Gateway | Ein Gateway (Push-Server), der mit Clients interagiert und für die Benutzerauthentifizierung, Sitzungsverwaltung, Push-Benachrichtigung und Lastverteilung für Turms-Service-Server verantwortlich ist |
Turms-Service | Implementiert IM-Geschäftslogik und bietet Administratoren Geschäftsdatenverwaltung, RBAC und Clusterverwaltung |
turms-admin | Bietet Funktionen wie Geschäftsdatenverwaltung und Clusterverwaltung für Turms Servercluster |
turms-client-js | Stellt APIs für die Interaktion mit dem Turms-Server zur Verfügung, um IM-Funktionen, die zugrunde liegende Treiberlogik (z. B. Heartbeat) und die gemeinsame Nutzung der WebSocket-Verbindung zwischen Tabs zu implementieren. Sie müssen die Implementierungen nicht kennen, da sie für Entwickler transparent sind |
wird-Client-Kotlin | Stellt APIs für die Interaktion mit dem Turms-Server bereit, um IM-Funktionen und die zugrunde liegende Treiberlogik (z. B. Heartbeat) zu implementieren. Sie müssen die Implementierungen nicht kennen, da sie für Entwickler transparent sind |
wird-client-swift | dito |
Turns-Client-Dart | dito |
Turms-Plugin | Wenn Ereignisse (z. B. Online-/Offline-Gehen eines Benutzers, Empfangen und Weiterleiten von Nachrichten usw.) ausgelöst werden, lösen Turms-Gateway und Turms-Service entsprechende benutzerdefinierte Plugins aus, um Entwicklern die Implementierung benutzerdefinierter Funktionen zu erleichtern |
Turms-Plugin-Antispam | Ein auf Turms-Plugin basierendes Plugin für den Anti-Spam-Schutz unter Verwendung des Aho-Corasick-Automaten mit Double-Array-Trie (die zeitliche Komplexität der Erkennung beträgt O(n) und n ist die Länge der Codepunkte der Zielzeichenfolge) |
Turms-Plugin-Minio | Ein auf Turms-Plugin basierendes Plugin für den Speicherdienst, das zur Interaktion mit dem MinIO-Server verwendet wird |
turms-plugin-rasa | Ein auf dem Turms-Plugin basierendes Plugin für den Chatbot, das zur Interaktion mit dem Rasa-Server verwendet wird |
Turmdaten (TODO) | Noch nicht veröffentlicht. Ein unabhängiges Datenanalysesystem auf Basis des Flink-Ökosystems ist für die Geschäftsdatenanalyse verantwortlich und bietet zugrunde liegende Datenunterstützung für die Statistik-APIs von Turms für Administratoren und Betriebsberichte von Turms-Admin |
Das Architekturdesign von Turms ist von kommerziellen Instant-Messaging-Architekturen abgeleitet. Die folgende Abbildung zeigt die Referenzarchitektur von Turms. Die durch gestrichelte Linien umrahmten Dienste sind optionale Dienste, während die durch durchgezogene Linien umrahmten Dienste erforderliche Dienste sind. Weitere Informationen finden Sie bei Turms Architecture Design.
Obwohl es weltweit viele Open-Source-IM-Projekte gibt, gibt es nur ein Open-Source-IM-Projekt, das für mittlere und große IM-Anwendungsszenarien konzipiert ist: Turms.
Rocket.Chat | Closed-Source-IM-Cloud | Türme | |
---|---|---|---|
Anwendungsszenarien | Teamkommunikation | Allgemeine IM-Szenarien | Allgemeine mittlere bis große IM-Szenarien (Turms für die Sanierung ermöglichen) (Hinweis: Die erste Version von Turms bietet keine Unterstützung für Wohn-/Chatrooms) |
Vorteile | 1. Stellen Sie Cloud-Dienste bereit, indem Sie einfach mit der Maus klicken, um den Cluster zu starten und Dienste bereitzustellen 2. Die Client-Implementierung ist plattformübergreifend und für Benutzer sofort einsatzbereit 3. Unterstützen Sie eine vollständige und einheitliche UI-Suite 4. Unterstützt umfangreiche erweiterte Instant-Messaging-Funktionen wie Audio- und Videokonferenzen, Dateifreigabe und Bildschirmfreigabe 5. Bieten Sie kommerziellen Benutzern technischen Support | 1. Stellen Sie Cloud-Dienste bereit, indem Sie einfach mit der Maus klicken, um den Cluster zu starten und Dienste bereitzustellen 2. Die Client-Implementierung ist plattformübergreifend und für Benutzer sofort einsatzbereit 3. Unterstützen Sie eine vollständige und einheitliche UI-Suite 4. Unterstützt umfangreiche erweiterte Instant-Messaging-Funktionen wie Audio- und Videokonferenzen, Dateifreigabe und Bildschirmfreigabe 5. Bieten Sie kommerziellen Benutzern technischen Support | Die Vorteile liegen in den oben beschriebenen Merkmalen |
Nachteile | 1. Nur für kleine Anwendungen geeignet 2. Enge Anwendungsszenarien und schwierig anzupassen | 1. Es ist Closed Source und kann nicht angepasst werden. Jedes Projekt wird nach dem Geschäftswachstum zwangsläufig neue Geschäftsanforderungen haben, die angepasst werden müssen. Allerdings stellen IM-Clouds entweder keine maßgeschneiderten Dienste bereit oder erfordern hohe Anpassungsgebühren, und sie können Ihre Anforderungen falsch verstehen, was zu maßgeschneiderten Funktionen führt, die Ihre Geschäftsanforderungen nicht gut erfüllen. Um mit ihnen gut zusammenzuarbeiten, bedarf es einer langfristigen Zusammenarbeit. Aber mit Turms können Ihre Anforderungen schnell umgesetzt und bereitgestellt werden, und das bei geringen Kosten. Hinweis: Einzelheiten zur Komplexität von IM finden Sie unter Schema Design 2. Datenschutz. Alle Ihre Benutzerinformationen und Nachrichtendaten werden in IM-Clouds gespeichert, die Ihre Daten einsehen und nutzen können. Insbesondere bei einigen kleinen IM-Unternehmen ist die Datensicherheit überhaupt nicht gewährleistet und Sie müssen sogar das Risiko eines unwiederbringlichen Datenverlusts tragen. 3. Je mehr Sie IM-Clouds nutzen, desto mehr verlassen Sie sich darauf, desto teurer ist es. Die meisten IM-Clouds bieten ein bestimmtes kostenloses Kontingent oder einen Testzeitraum. Sobald jedoch der Benutzerumfang Ihres Produkts wächst, müssen Sie eine hohe Nutzungsgebühr zahlen oder die Nutzung aufgeben, um mit der Entwicklung Ihres eigenen IM-Servers zu beginnen 4. Der technische Support kommt nicht rechtzeitig. IM-Clouds müssen vielen Kunden gleichzeitig technischen Support bieten, und der Support für Ihr Produkt kann hinterherhinken | 1. Erfüllt nur die allgemeinen Instant-Messaging-Anforderungen und bietet keine erweiterten Funktionen (z. B. keine Unterstützung für Audio- und Videokonferenzen). 2. Die erste Version von Turms unterstützt keinen Wohn-/Chatroom 3. Der Turms-Server stellt nur Rohdaten von Metriken/Protokollen bereit und bietet keine Funktionen wie Analyse und Alarme 4. Die webbasierte Systemverwaltung turms-admin bietet derzeit keine erweiterten Bedienfunktionen5. Keine Unterstützung für bestimmte Geschäftslogik und Benutzeroberfläche 6. Server sind reaktiv, was für einige Entwickler eine Herausforderung darstellt |
Kommentar | Es wird dringend empfohlen, Rocket.Chat für die Teamkommunikation zu verwenden | Wenn die IM-Geschäftsszenarien in Ihrem Produkt sehr verbreitet sind, keine benutzerdefinierten Anforderungen bestehen und das IM-Geschäft nicht das Hauptgeschäft Ihres Produkts ist, wird die Verwendung von IM-Clouds empfohlen. Wenn jedoch keine besonderen Anforderungen bestehen, sollten Sie versuchen, die von kleinen Unternehmen bereitgestellte IM-Cloud nicht zu verwenden, da sonst die Sicherheit Ihrer Daten nicht gewährleistet ist | Obwohl es sich bei beiden um Open-Source-IM-Projekte handelt, haben sie völlig unterschiedliche Anwendungsszenarien. Turms ist eine allgemeine Instant-Messaging-Engine für mittlere bis große Instant-Messaging-Anwendungen. Sie können Turms nicht einfach an Ihre Kunden weitergeben (so wie die meisten Produkte es Kunden nicht erlauben, SQL-Anweisungen zu schreiben, um Geschäftsdaten in der Datenbank abzufragen). Allerdings lassen sich mit Turms alle Open-Source-Instant-Messaging-Projekte auf GitHub effizienter, umfassender und umfangreicher umsetzen |
Angesichts der Positionierung von Turms planen wir nicht, in naher Zukunft eine Kundendemo mit Benutzeroberfläche und spezifischer Geschäftslogik bereitzustellen.
Für Entwickler ist es einfach, die von Turms unterstützten Geschäftsfunktionen zu überprüfen. Wenn Sie lediglich die Geschäftsfunktionen von Turms testen möchten, können Sie den Turms-Server ausführen, ohne auch nur eine Zeile Code einzugeben. Nur zehn Codezeilen können die Anmeldung, das Senden von Nachrichten, das Senden von Freundschaftsanfragen und andere Geschäftsfunktionen realisieren oder Eigenschaften ändern, um verschiedene Anforderungen anzupassen.
Das Design und die Implementierung der Demo hängen eng mit den spezifischen Geschäftsszenarien, der spezifischen Programmiersprache, der spezifischen technischen Architektur und dem spezifischen Betriebssystem zusammen, während sich Turms der effizienten Bewältigung verschiedener komplexer und herausfordernder Instant-Messaging-Szenarien verschrieben hat, und das möchten wir nicht Veröffentlichen Sie eine Demo, die die Vorstellungskraft der Entwickler einschränkt. Und auch die Entwicklung und Pflege einer Demo ist sehr zeitaufwändig und wird den Fortschritt der Turms-Entwicklung verlangsamen.
Derzeit müssen Sie nur mit GPT-3.5 und GPT-4 „chatten“, um benutzerdefinierte technische Lösungen und UI-Design zu realisieren. Nehmen Sie den Text als Eingabebeispiel (zusätzlich unterstützt GPT-4 die Bildeingabe, und Sie können auch UI-Drahtmodelle zeichnen, um vorzuschlagen, wie die Benutzeroberfläche gestaltet werden soll).
Bitte implementieren Sie ein Kundenservice-Chat-Fenster, das auf der Web-Seite läuft und auf Vue3, Vite, Eslint und anderen Technologien basiert. Spezifische Anforderungen.
- Der UI-Designstil muss sich auf Folgendes beziehen: Ant Design
- Das Chat-Fenster sollte in drei Teile unterteilt sein: Oben sollte der Name des Kundendienstes angezeigt werden; in der Mitte sollte die Chat-Nachricht zwischen dem Benutzer und dem Kundenservice angezeigt werden; und unten sollten ein Texteingabefeld und eine Senden-Schaltfläche vorhanden sein, damit der Benutzer Text eingeben und Nachrichten senden kann.
- Das Chatfenster sollte immer in der oberen rechten Ecke der Seite angezeigt werden
- Sie müssen davon ausgehen, dass das Chat-Fenster auf dem WebSocket-Protokoll basiert, um mit dem Backend-Server zu kommunizieren, um sich anzumelden, Nachrichten zu senden, Nachrichten zu empfangen usw.
- Sie müssen die Projektstruktur und die gesamte spezifische Code-Implementierung im Projekt basierend auf der UI-Komponenten-Designlösung angeben
GPT kann die entsprechende Code-Implementierung sofort bereitstellen, und Sie können mit ihm auf der Grundlage verschiedener Szenarien weiter „chatten“ (Sie können GPT mehrere Szenarien bereitstellen und vergleichen lassen), um das UI-Design und die Code-Implementierung zu verfeinern und die endgültige Implementierung abzuschließen zu Ihrer Idee.
Das Turms-Projekt ist unter der Apache License 2.0
Lizenz lizenziert, daher ist es uns egal, ob Benutzer mit dem Turms-Projekt Gewinne erzielen möchten. Wir verlangen von Benutzern nur, dass sie in Ihren Werken, wie Dokumenten, Videos, Codes usw., die Apache License 2.0
Lizenz einhalten, um die Informationen des Turms-Projekts zu erwähnen, wie zum Beispiel:
Original Project Name:turms-im/turms
Original Project:https://github.com/turms-im/turms
Original Project Documentation:https://turms-im.github.io/docs
Wie profitabel ist das Turms-Projekt?
Wir müssen derzeit nicht profitabel sein. Natürlich schließen wir einen Gewinn nicht aus, aber wir werden nicht absichtlich schlechte Dokumente schreiben oder schlechte Arbeit leisten, um Beratungs-, Schulungs- und andere Ausgaben zu verdienen. Erwähnenswert ist auch, dass es tatsächlich viele (geschlossene) Open-Source-Projekte gibt, die Service-Support-Gebühren verdienen, indem sie absichtlich schlechte Dokumente schreiben und schlechte Arbeit leisten.
Müssen diese gewinnorientierten Organisationen, wenn sie auf die Dokumente von Turms verweisen oder sogar Turms-Projekte als SaaS-Dienste verkaufen, auf irgendetwas achten?
Es ist uns egal, ob Ihr Team mit dem Turms-Projekt Gewinne erzielen möchte. Ihr Team muss lediglich die Apache License 2.0
Lizenz einhalten und die Turms-Projektinformationen wie oben erwähnt erwähnen.
Das Turms-Projekt eignet sich für die Bereitstellung von SaaS-Diensten. Warum übernimmt das Turms-Projekt nicht die AGPL- oder SSPL-Lizenz?
Wir müssen derzeit keinen Gewinn erwirtschaften und haben auch nicht vor, einen Gewinn zu erwirtschaften. Wir verlangen von Benutzern lediglich die Einhaltung der Apache License 2.0
Lizenz.
Wenn das Turms-Projekt nicht rentabel ist, wie ist dann die Qualität seines Projekts?
Unsere Dokumentation und unser Quellcode haben diese Frage für uns beantwortet, und in der Open-Source-Community gibt es kein Open-Source-IM-Projekt, das in mittleren und großen IM-Anwendungsszenarien mit dem Turms-Projekt konkurrieren kann. Erwähnenswert ist auch, dass kommerzielle Projekte keine hohe Qualität bedeuten und selbst die Qualität der Dokumentation und des Codes vieler kommerzieller Projekte schockierend ist.
Verwendet Turms Doppellizenzvereinbarungen oder fallen versteckte Gebühren an?
Nein. Einige Projekte sind für den persönlichen Gebrauch kostenlos und für die kommerzielle Nutzung kostenpflichtig, da es sich um doppelte Lizenzvereinbarungen handelt oder viele versteckte Kosten anfallen. Das Turms-Projekt ist unter der Apache License 2.0
Lizenz lizenziert und es fallen keine Kosten an. Einige Projekte behaupten, Open-Source-Software zu sein, was sie aber nicht sind. Einzelheiten finden Sie in der Open-Source-Definition.
Hauptsächlich in IntelliJ IDEA und CLion entwickelt.
Lizenz mit freundlicher Genehmigung des JetBrains Community Support Teams.