Frage

Beide bieten etwa die gleiche Funktionalität. Welche soll ich wählen, meinen High-Performance-TCP-Server zu entwickeln? Was sind die Vor- und Nachteile?

Referenz Links:

Apache MINA ( Quelle )

Netty (

War es hilfreich?

Lösung

Während MINA und Netty ähnliche Ambitionen haben, sind sie ganz anders in der Praxis, und Sie sollten Ihre Wahl sorgfältig prüfen. Wir hatten Glück, dass wir viel Erfahrung mit MINA und hatten die Zeit mit Netty zu spielen, um. Besonders gefallen haben uns die sauberere API und eine viel bessere Dokumentation. Leistung schien besser auf dem Papier zu. Noch wichtiger ist wussten wir, dass Trustin Lee vor Ort sein würde, irgendwelche Fragen zu beantworten, die wir hatten, und er hat sicherlich das.

Wir fanden alles leichter in Netty. Zeitraum. Während wir die gleiche Funktionalität neu zu implementieren versuchten wir bereits auf MINA hatten, haben wir so von Grund auf neu. Durch Anschluss an die hervorragende Dokumentation und Beispiele am Ende hat uns mit mehr Funktionalität in viel, viel weniger Code auf.

Die Netty Pipeline funktionierte besser für uns. Es ist irgendwie einfacher als Minás, wo alles, was ein Handler ist, und es ist an Ihnen zu entscheiden, ob Upstream-Ereignisse zu behandeln, Downstream-Ereignisse, die beide oder mehr Low-Level-Material verbrauchen. Gobbling Bytes in „Wiedergabe“ Decoder war fast ein Vergnügen. Es war auch sehr schön zu können, um die Pipeline on-the-fly so leicht neu konfiguriert werden.

Aber die Hauptattraktion von Netty, imho, ist die Fähigkeit, Pipeline-Handler mit einer „Deckung eines“ zu erstellen. Sie haben wahrscheinlich schon von diesen Coverage-Annotations bereits in der Dokumentation zu lesen, aber im Wesentlichen gibt es Sie in einer einzigen Codezeile angeben. Mit kein Herumspielen, keine Sitzung Karten, Synchronisation und solche Sachen, waren wir einfach in der Lage regulären Variablen zu deklarieren (sagen wir, „username“) und sie verwenden.

Aber dann treffen wir eine Straßensperre. Wir hatten bereits einen Multi-Protokoll-Server unter MINA, in dem unser Anwendungsprotokoll über TCP / IP lief, HTTP und UDP. Wenn wir zu Netty geschaltet haben wir SSL und HTTPS auf die Liste in wenigen Minuten! So weit so gut, aber wenn es um UDP kam erkennen wir, dass wir vertan hatten. MINA war sehr nett zu uns, dass wir UDP als „verbunden“ Protokoll behandeln könnten. Unter Netty gibt es keine solche Abstraktion. UDP ist verbindungslos und Netty behandelt sie als solche. Netty macht mehr von der verbindungslosen Art von UDP auf einem niedrigeren Niveau als MINA tut. Es gibt Dinge, die Sie mit UDP unter Netty tun können, als Sie können nicht unter der höheren Abstraktionsebene, die MINA bietet, aber auf dem verließen wir uns.

Es ist nicht so einfach, einen „verbunden UDP“ Wrapper oder etwas hinzuzufügen. In Anbetracht Zeitdruck und auf Trustin Rat, dass der beste Weg war, um fortzufahren unseren eigenen Transportanbieter in Netty zu implementieren, die nicht schnell sein würde, hatten wir Netty am Ende zu verlassen.

Also, schauen hart auf die Unterschiede zwischen ihnen und schnell zu einem Stadium, wo Sie jede knifflige Funktionalität wie erwartet testen funktioniert. Wenn Sie zufrieden sind, dass Netty die Arbeit tun, dann würde ich nicht mit ihm über MINA zu gehen zögern. Wenn Sie von MINA zu Netty sich bewegen dann das gleiche gilt, aber es ist erwähnenswert, dass die beiden APIs wirklich signifikant verschieden sind, und Sie sollten eine virtuelle Rewrite für Netty betrachten - Sie werden es nicht bereuen

Andere Tipps

MINA hat mehr out-of-the-Box-Funktionen auf Kosten der Komplexität und relativ schlechter Leistung. Einige dieser Funktionen wurden in den Kern integriert zu fest noch entfernt werden, wenn sie nicht von einem Benutzer benötigt werden. In Netty, habe ich versucht, solche Design-Probleme zu lösen, während die bekannten Stärken von MINA beibehalten werden.

Derzeit sind die meisten Funktionen, die in MINA sind auch in Netty zur Verfügung. Meiner Meinung nach, hat Netty sauberen und dokumentierter API seit Netty das Ergebnis versuchen, neu zu erstellen MINA von Grunde auf und adressiert die bekannten Probleme ist. Wenn Sie, dass ein wesentliches Merkmal finden fehlen, wenden Sie sich bitte Ihren Vorschlag an das Forum zu posten. Ich würde mich freuen, Ihr Anliegen zu befassen.

Es ist auch wichtig zu beachten, dass Netty schnellen Entwicklungszyklus hat. Einfach, überprüfen Sie die Release-Datum der jüngsten Meldungen aus. Außerdem sollten Sie bedenken, dass MINA Team zu einem großen Umschreiben stattfindet, MINA 3, das bedeutet, dass sie in der API-Kompatibilität vollständig brechen.

MINA und Netty wurden ursprünglich entwickelt, und von demselben Autor bauen. Deshalb sind sie so ähnlich zueinander sind. MINA ist auf einem etwas höheren Niveau mit ein wenig mehr Funktionen ausgelegt, während Netty ein wenig schneller ist. Ich denke, dass es überhaupt nicht viel Unterschied ist, sind die grundlegenden Konzepte gleich.

In Netty Website Sie einige Performance Berichte finden. Wie erwartet :-) sie Netty mit der besten Leistung als Rahmen weisen.

I Netty nie benutzt, aber ich MINA bereits verwendet, um ein TCP-Protokoll zu implementieren. Die Umsetzung der Codierung und Decodierung war leicht, aber die Implementierung der Zustandsmaschine war nicht so einfach. MINA bietet einige Klassen, die Sie zu unterstützen, wenn die Zustandsmaschine Umsetzung, aber ich fand sie ziemlich schwer zu bedienen. Am Ende haben wir beschlossen, MINA zu Graben und das Protokoll von Grund auf neu zu implementieren, und überraschend am Ende haben wir mit einem schnelleren Server.

Ich ziehe Netty.

Twitter wählte Netty auch sein neues Suchsystem zu bauen und beschleunigt es 3x schneller auf.

Ref: Twitter Suche Jetzt wird 3x schneller

  

Wir entschieden uns für Netty über einige seiner Konkurrenten, wie Mina und Jetty, denn es hat eine saubere API, eine bessere Dokumentation und, noch wichtiger, weil mehrere andere Projekte bei Twitter sind mit diesem Rahmen.

Ich habe immer nur MINA verwendet, um einen kleinen http wie Server zu bauen. Die größten Probleme, die ich so weit laufen mit ihm in haben:

  1. Es wird Ihre „Anfrage“ und „Antwort“ im Speicher halten. Dies ist nur ein Problem, weil das Protokoll I zu verwenden, wählen http ist. Sie könnten Ihr eigenes Protokoll verwenden jedoch, dies zu umgehen.
  2. Keine Option einen Strom aus Platte bereitzustellen, falls Sie große Dateien dienen wollen. Auch hier gearbeitet um sein kann Ihr eigenes Protokoll
  3. durch die Umsetzung

Schöne Dinge über sie:

  1. Kann eine Menge Verbindungen verarbeiten
  2. Wenn Sie irgendeine Art von verteilten Arbeitssystem implementieren, dann zu wissen, wann Sie einen der Knoten geht nach unten und verliert die Verbindung zum Neustarten der Arbeit an einem anderen Knoten nützlich ist.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top