2013-05-11 19 views
7

Jaki jest najlepszy sposób symulacji sieci w Javie?Symulacja ruchu sieciowego p2p na jednym komputerze

Jestem na wczesnym etapie projektu sieciowego peer-to-peer, i aby określić niektóre z wymaganych cech klientów, chciałbym móc symulować ponad 100 wystąpień jednocześnie na moim komputerze.

Idealnie chciałbym stworzyć "symulacyjną" wersję gniazd z własnymi wejściami i wyjściowymi strumieniami. W końcu zamierzam wykorzystać te strumienie do transferu danych zamiast po prostu przenosić dane między obiektami java, więc to, co chcę symulować, to rodzaj opóźnień, utraty danych i innych błędów, które można uzyskać w rzeczywistej sieci.

Idealnie byłoby, gdyby te metody symulacji były bardzo zbliżone do rzeczywistych standardów strumieniowych z java.net.*, więc nie musiałbym wykonywać przeróbek, aby przejść z symulacji do rzeczywistego klienta.

Czy ktoś może wskazać mi właściwy kierunek?

+0

Nie dodawaj sigs. na pytania, to hałas. –

Odpowiedz

3

Możesz użyć Akka, aby utworzyć miliony Aktorów na jednym komputerze, a następnie zorganizować komunikację między nimi podobnie jak w "prawdziwej" sieci.

Oto przykładowy projekt: https://github.com/adelbertc/scalanet

+0

Co się stało? Czy przeczytałeś dokumentację? Nie widzę żadnych e-maili na liście mailingowej, nie bój się prosić o pomoc, aby się odblokować. Większość użytkowników Akki używa go z Javy, więc jestem prawie pewien, że to nie bs. Dokumentacja: http://doc.akka.io/docs/akka/2.1.2/ –

+0

Przykro mi, zmagam się z sensem twojego komentarza. Rzeczywiście, opublikowałem pytanie na liście mailingowej jakiś czas temu, otrzymałem odpowiedź i mniej więcej z niej byłem zadowolony. Teraz, kiedy robię asynchroniczne IO, czytam akka dokumenty regularnie, ale ponieważ aktorzy są w pewnym sensie paradygmatem, muszę czytać rozdziały więcej niż jeden raz, aby uzyskać pełne zrozumienie))) Używam też Akka z scala . – vitalii

+0

Przepraszamy, komentarz zakończył się na niewłaściwej karcie. –

0

Dla celów symulacji może chcesz sprawdzić Omnet++, I'ts idealne dla dużych skalowanych symulacji z wbudowanym analiza danych/narzędzi statystycznych. Pisanie jest podobne do C++, zobacz tutoriale, to całkiem proste.

Przykład sieci 6 gospodarze (Zaczerpnięty z samouczka Omnet ++)

1

Więc tak naprawdę nie trzeba używać żadnych narzędzi, ale umieścić swoje mózgi zaprojektować lepiej.

Potrzebne są interfejsy do ukrytej struktury komunikacyjnej.

Wszystko czego potrzebujesz to mock/zastąpić rzeczywistą realizację jednego z manekina raz zostały zakodowane przed interfaces.This manekin realizacja może wprowadzić funkcje, takie jak opóźnienia, dane fikcyjne itp

Możesz iść z pojemnika wiosennej . Możesz zapisać w kontenerze fałszywe gniazda serwerów, aby symulować rozmowy między wieloma instancjami lub lepiej korzystać z kontenera internetowego, aby oddzielić ten ból głowy od Ciebie.

+0

Chociaż jest to pierwsza myśl, która przychodzi mi do głowy, to pytanie mówi, że chce symulować opóźnienie i utratę danych. To będzie nietrywialne, jeśli pomiędzy nimi nie ma rzeczywistej sieci. – flup

+1

A kiedy już zaprojektowałeś go na tyle dobrze, aby móc umieścić fałszywą sieć za nim, musisz faktycznie kpić z sieci - i tym samym właściwie wdrożyć narzędzie, o które prosi. – kutschkem

+1

Opóźnienie i dane są równoważne z uśpieniem wątku i usunięciem niektórych danych z podstawowej struktury danych. Jeśli symulujesz/kpisz, możesz przetestować swoją implementację w bardzo precyzyjny sposób (tzn. Wysoce konfigurowalny), ale jeśli polegasz na prawdziwej sieci do symulacji, nie jestem pewien, czy możesz zrobić to samo. – Rohitdev