2013-05-11 8 views
7

Wie lässt sich ein Netzwerk in Java am besten simulieren?Simulieren von P2P-Netzwerkverkehr auf einem einzelnen Computer

Ich bin in den frühen Phasen eines vernetzten Peer-to-Peer-Projekts, und um einige der erforderlichen Eigenschaften der Clients zu bestimmen, möchte ich mehr als 100 Instanzen gleichzeitig auf meinem PC simulieren können.

Idealerweise möchte ich eine "Simulations" -Version der Sockets mit ihren eigenen Ein- und Ausgabeströmen erstellen. Letztendlich werde ich diese Datenströme für die Datenübertragung verwenden, anstatt Daten zwischen Java-Objekten zu verschieben. Was ich also simulieren möchte, ist die Art von Latenz, Datenverlust und anderen Fehlern, die Sie in einem tatsächlichen Netzwerk bekommen könnten.

Im Idealfall würden diese Simulationsmethoden den tatsächlichen Stream-Standards von java.net.* sehr nahe kommen, so dass ich nicht viel umschreiben müsste, um von der Simulation zum eigentlichen Client zu gelangen.

Kann mir jemand in die richtige Richtung zeigen?

+0

Fügen Sie keine Sigs hinzu. Zu Fragen sind sie Lärm. –

Antwort

3

Sie können Akka verwenden, um Millionen von Akteuren auf einer einzelnen Maschine zu erstellen und dann die Kommunikation zwischen ihnen ähnlich wie bei einem echten Netzwerk zu organisieren.

Hier ist ein Beispiel-Projekt: https://github.com/adelbertc/scalanet

+0

Was ist passiert? Hast du die Dokumentation gelesen? Ich sehe keine E-Mails auf der Mailingliste, habe keine Angst, um Hilfe zu bitten, sich loszureißen. Die meisten Akka-Benutzer verwenden es aus Java, also bin ich mir ziemlich sicher, dass es nicht bs ist. Dokumentation: http://doc.akka.io/docs/akka/2.1.2/ –

+0

Entschuldigung, ich habe Schwierigkeiten, Ihren Kommentar zu verstehen. Tatsächlich habe ich vor einiger Zeit eine Frage auf der Mailingliste gestellt, eine Antwort bekommen und mehr oder weniger zufrieden damit. Wenn ich nun async IO mache, lese ich akka docs regelmäßig, aber weil Schauspieler in gewisser Weise ein Paradigmenwechsel sind, muss ich Kapitel mehr als einmal lesen, um ein vollständiges Verständnis zu erhalten))) Auch ich benutze Akka mit scala . – vitalii

+0

Entschuldigung, der Kommentar endete auf der falschen Registerkarte. –

0

Für Simulationszwecke können Sie Omnet++ zu überprüfen, I'ts groß für große skalierte Simulationen mit Werkzeugen in der Datenanalyse/Statistik gebaut. Schreiben ist ähnlich wie C++, siehe die Tutorials, es ist ziemlich einfach.

Beispiel 6 Hosts Netzwerk (Entnommen aus OMNeT ++ Tutorial)

1

Nun, Sie nicht wirklich brauchen keine Werkzeuge zu verwenden, sondern setzen Sie Ihre Gehirne es besser zu gestalten.

Sie benötigen Schnittstellen für das zugrunde liegende Kommunikationsframework.

Alles, was Sie brauchen, ist zu verspotten/ersetzen die reale Umsetzung mit einem Dummy ein, wenn Sie gegen die interfaces.This Implementierung Dummy-codiert sind Features wie Latenz, Dummy-Daten usw.

Sie können mit Federbehälter gehen einführen Sie können einige Dummy-Server-Sockets in den Container schreiben, um Gespräche zwischen mehreren Instanzen zu simulieren, oder besser einen Web-Container verwenden, um diese Kopfschmerzen von Ihnen zu nehmen.

+0

Während dies der erste Gedanke ist, der mir ebenfalls in den Sinn kommt, besagt die Frage, dass er Latenz und Datenverlust simulieren will. Das ist nicht trivial, wenn dazwischen kein Netzwerk vorhanden ist. – flup

+1

Und sobald Sie es gut genug entwickelt haben, um ein hinterlistiges Netzwerk hinter sich zu lassen, müssen Sie das Netzwerk tatsächlich verspotten - und so ein Werkzeug implementieren, wie er es verlangt. – kutschkem

+1

Latenz und Datenverlust ist äquivalent dazu, einen Thread in den Ruhezustand zu versetzen und einige Daten aus der zugrunde liegenden Datenstruktur zu löschen. Wenn Sie simulieren/mocksen, können Sie Ihre Implementierung sehr fein abgestimmt testen (d. H. In hohem Maße konfigurierbar), aber wenn Sie für die Simulation auf ein echtes Netzwerk angewiesen sind, bin ich mir nicht sicher, ob Sie das auch tun können. – Rohitdev