2010-11-30 27 views
5

J'ai quelques ordinateurs sur un réseau, le réseau est en quelque sorte série, je veux dire les ordinateurs sont connectés les uns aux autres via des émetteurs radio et en ligne, si un émetteur radio s'éteint ou face à les problèmes d'autres ordinateurs ne sont pas accessibles. l'architecture serait quelque chose comme ceci:
RT = émetteurs radio
Computer#1<-RT#1->Computer#2<-RT#2->Computer#3<-RT#3->....<-RT#(N-1)->Computer#NRéseau à faible vitesse avec un risque élevé de déconnexion

Les distances entre les ordinateurs sont environ 20 à 30 km et la vitesse du réseau varie entre 0 et 10kbps. les ordinateurs exécutent Windows XP et un programme très chargé (2 Go de RAM, 90% d'utilisation du processeur) s'exécute en permanence, toutes les adresses IP des ordinateurs sont connues et statiques.

Je vais écrire un programme qui va s'exécuter sur chaque ordinateur et obtenir des commandes ou des paquets à exécuter ou installer et mettre à jour sur cet ordinateur. En raison du réseau à faible vitesse et du risque élevé de déconnexion, l'envoi de données entre ordinateurs devrait avoir une capacité de reprise. la question est comment dois-je mettre en œuvre cela? utilisant .NET remoting ou utiliser des sockets réseau simples et TCP? quel est le meilleur? N'hésitez pas à expliquer votre suggestion ou les approches que vous pensez adopter cette solution.

+0

sont les machines sur un domaine? Serveurs, postes de travail? – dotnetnate

Répondre

1

Que diriez-vous d'ajouter un nouveau système qui se comportera comme un serveur. Ce système hébergera un service (et peut-être une base de données) qui contrôlera toutes les opérations sur le réseau. Comme toutes les adresses IP sont statiques, elles peuvent facilement être suivies et relancées en cas de déconnexion.

Pour les transmissions volumineuses, vous pouvez compresser et séparer les colis et les envoyer séparément. En cas d'échec, la transmission reprendra à partir du paquet interrompu. Avec un serveur séparé, toutes ces statistiques peuvent facilement être maintenues et le trafic peut être contrôlé en conséquence.

Les clients peuvent même envoyer une requête ping au serveur pour des commandes/mises à niveau en attente en cas de charge CPU faible. Avec WCF, il est possible d'effectuer des transmissions bidirectionnelles/duplex.

What You Need To Know About One-Way Calls, Callbacks, And Events

WCF Duplex Messaging

+0

bonne idée! tnx –

5

Avoir une lecture sur UUCP, historiquement la solution à ce problème et la configuration.

+0

Si je veux utiliser une telle chose comme UUCP, je vais utiliser. Remoting .NET! –

+0

@HPT Je ne dis pas que c'est une technologie incroyable, mais c'est certainement une technologie éprouvée. –

1

J'avais l'habitude de développer sur une connexion terrible.

J'ai eu des paquets retournant littéralement heures (3-6 heures IIRC) plus tard.

Merci bien ce contrat est terminé :)

Amusez-vous! Je ressens ta douleur.

0

Vous pouvez utiliser un cadre comme NServiceBus qui est basé sur la messagerie, puis abstraites vos programmes des connexions eux-mêmes.

Le système peut autoriser la messagerie "repeat until successful" avec un tampon quelque part le long de la ligne, et vous n'aurez pas à vous soucier de trop de choses de bas niveau.

http://www.nservicebus.com/

Je ne sais pas si elle permet un grand transfert de données, mais le vérifier pour les commandes