7
votes

Simuler le trafic réseau P2P sur un seul ordinateur

Quelle est la meilleure façon de simuler un réseau en Java?

Je suis aux premiers stades d'un projet de pair en réseau au projet de pair et de déterminer certaines des caractéristiques requises des clients que j'aimerais pouvoir simuler plus de 100 instances sur mon PC.

Idéalement, je voudrais créer une version "simulation" des sockets, avec leurs propres entrées et flux de sortie. Finalement, je vais utiliser ces flux pour le transfert de données au lieu de simplement déplacer des données entre les objets Java, de sorte que ce que je veux simuler est le type de latence, la perte de données et d'autres erreurs que vous pourriez obtenir dans un réseau actuel.

Idéalement, ces méthodes de simulation seraient très proches des normes de flux réelles de java.net. * , donc je n'aurais donc pas besoin de faire une grande partie d'une réécriture afin de passer de la simulation à la client réel.

Quelqu'un peut-il me dire dans la bonne direction?


1 commentaires

N'ajoutez pas de SIGS. aux questions, ils sont du bruit.


3 Réponses :


3
votes

Vous pouvez utiliser AKKA pour créer des millions d'acteurs sur une seule machine, puis organiser la communication entre eux similaire à 'réel ' réseau.

Voici un exemple de projet: https://github.com/adelbertc/scalanet


2 commentaires

Que s'est-il passé? Avez-vous lu la documentation? Je ne vois pas de courriels sur la mailinglist, n'ayez pas peur de demander de l'aide pour se détendre. La majorité des utilisateurs d'Akka l'utilisent de Java, alors je suis sûr que ce n'est pas BS. Documentation: doc.akka.io/docs/akka/2.1.2


Désolé, j'ai du mal à donner un sens à votre commentaire. En effet, j'ai posté une question sur la liste de diffusion il y a quelque temps, obtenu une réponse et plus ou moins satisfaite. Maintenant, lorsque je fais Async io, je lis régulièrement Akka Docs, mais parce que les acteurs sont dans un sens un changement de paradigme, je dois lire plus d'une fois pour obtenir une compréhension complète))) aussi j'utilise Akka avec Scala .



0
votes

à des fins de simulation, vous voudrez peut-être vérifier omnet ++ , j'ai idéal pour les grandes simulations à l'échelle avec construction dans les outils d'analyse / statistiques de données. L'écriture est similaire à C ++, voir les tutoriels, il est assez simple.

Exemple 6 Network Hosts (extrait du tutoriel omnet ++)


0 commentaires

1
votes

Eh bien, vous n'avez pas vraiment besoin d'utiliser des outils, mais mettez votre cerveau pour le concevoir mieux.

Vous avez besoin d'interfaces pour le cadre de communication sous vide.

Tout ce dont vous avez besoin est de simuler / substituer la mise en œuvre réelle avec un mannequin une fois que vous avez codé contre les interfaces. Cette mise en œuvre factice peut introduire des fonctionnalités telles que la latence, les données factices etc.

Vous pouvez aller avec le conteneur à ressort.Vous pouvez écrire des prises de serveur mannequin dans le conteneur pour simuler des conversations entre plusieurs instances ou une meilleure utilisation d'un conteneur Web pour prendre ce mal à la tête loin de vous.


3 commentaires

Bien que ce soit la première pensée qui me vienne également à l'esprit, la question indique qu'il souhaite simuler la latence et la perte de données. Ça ne sera pas non attrayant s'il n'y a pas de réseau réel entre les deux.


Et une fois que vous avez conçu cela suffisamment pour pouvoir mettre un réseau simulé derrière cela, vous devez réellement se moquer du réseau - et donc à peu près à mettre en œuvre un outil comme il demande.


La latence et les loos de données sont équivalents à la mise au sommeil et à la suppression des données de la structure de données sous-jacente. Si vous simulez / maquette, vous pouvez tester votre implémentation de manière très touchée (c'est-à-dire très configurable), mais si vous dépendez du réseau réel pour la simulation, je ne suis pas sûr de pouvoir faire de même.