Création d'une connexion entre deux ordinateurs en python
La question: Comment puis-je créer une application python qui peuvent se connecter et envoyer des paquets sur internet à un autre ordinateur exécutant le même application? Est-il un code existant/bibliothèque que je pourrais utiliser?
Le contexte: je suis assez nouveau à la programmation (HS senior). J'ai créé beaucoup de choses simples en python, mais j'ai récemment décidé de commencer sur un projet de plus grande envergure. Je suis en train d'étudier la création d'un Magic: the Gathering booster projet de simulateur, mais je ne sais pas si c'est réalisable, compte tenu de mes compétences, donc je pose la question autour de vous avant que je commence. L'application aurait besoin d'envoyer des données entre les ordinateurs sur lequel les cartes sont en train d'être repris/passé.
Merci!
OriginalL'auteur | 2009-06-01
Vous devez vous connecter pour publier un commentaire.
Tordu est un python piloté par les événements de réseautage moteur sous licence MIT. Signifie qu'une seule machine peut communiquer avec un ou plusieurs autres machines, tout en faisant d'autres choses entre les données reçues et envoyées, toutes les de façon asynchrone, et l'exécution d'un dans un seul thread/processus.
Il prend en charge de nombreux protocoles de sortie de la boîte, de sorte que vous pouvez tout aussi bien partir d'un existant. C'est mieux parce que vous obtenez de l'aide pour le protocole de la 3ème partie logiciel (c'est à dire à l'aide de HTTP pour les moyens de communication middleware logiciel qui utilise HTTP seront compatibles: les procurations, etc.)
Il rend également facile de créer votre propre protocole de communication, si c'est ce que vous voulez.
La la documentation est rempli avec des exemples.
OriginalL'auteur nosklo
De la bibliothèque standard comprend SocketServer (documenté ici), ce qui pourrait faire ce que vous voulez.
Cependant je me demande si une meilleure solution pourrait être d'utiliser une file d'attente de messages. Beaucoup de bonnes implémentations existent déjà, y compris Python interfaces. J'ai utilisé RabbitMQ avant. L'idée est que les ordinateurs à la fois de s'abonner à la file d'attente, et pouvez enregistrer ou écouter des événements.
OriginalL'auteur Daniel Roseman
Un excellent endroit pour commencer votre recherche est le La Bibliothèque Standard De Python. En particulier, il y a quelques articles qui seront pertinents:
Puisque vous avez mentionné que vous n'avez aucune expérience avec ce, je vous suggère de commencer avec un HTTP en fonction de la mise en œuvre. Le HTTP protocole est assez simple et facile à travailler avec. En outre, il y a de belles cadres à l'appui de cette opération, comme webpy pour le serveur et HTTPLib de la bibliothèque standard pour le client.
Si vous avez vraiment envie de plonger dans le réseautage, puis un socket en fonction de la mise en œuvre pourrait être éducatif. Cela vous apprendra les concepts sous-jacents qui sont utilisés dans beaucoup de code de mise en réseau tout en conduisant à une interface qui est similaire à un fichier de flux.
une forte -1 en recommandant de bas niveau des sockets pour un débutant. Dans mon expérience de l'enseignement, de l'enseigner à un haut niveau cadre et de montrer ensuite la mise en évidence de la mise en œuvre fait beaucoup plus de sens que de leur enseigner comment faire de mal.
Je suppose que cela dépend de ce que l'étudiant est à la recherche d'en sortir et à quel niveau ils sont vraiment au. De mon pov, si je voulais me renseigner sur la communication en réseau et en quelque sorte de ne jamais savoir sur les sockets, je serais en colère. Après la connexion initiale est formée, à l'aide de sockets est seulement un peu plus difficile que la lecture/écriture d'un fichier. L'avantage est que l'étudiant arrive à penser à la façon dont ils veulent représenter les données.
Les Sockets sont vraiment dur pour obtenir le droit. C'est BEAUCOUP plus difficile que la lecture d'un fichier. Même si l'élève veut apprendre de bas niveau, elle doit d'abord apprendre à haut niveau pour obtenir les bases et ensuite d'étudier la mise en évidence de la mise en œuvre. Ou conseillez-vous à l'apprentissage de l'assemblée avant de python? Pour votre deuxième point, l'étudiant aura à réfléchir sur la façon de représenter les données de toute façon, et je ne vois pas comment l'apprentissage sur les prises de changement que dans n'importe quel moyen.
Ma réponse n'est pas dirigé vers quelqu'un écrit du code de production, mais, au contraire, est dirigé vers ceux qui souhaitent apprendre quelque chose. Évidemment, il existe différentes méthodes pour apprendre les mêmes concepts. Je concède que, à partir de la prise de l'interface n'est pas la façon la plus rapide de code de travail et est probablement pas le meilleur choix pour un solide/stable du système. Cependant, je maintiens mon affirmation selon laquelle l'apprentissage comment utiliser le socket interface de précieuses connaissances.
OriginalL'auteur Doug
De la Communication aura lieu avec les sockets, d'une manière ou d'une autre. Juste une question de savoir si vous utilisez existantes de niveau supérieur des bibliothèques, ou de rouler votre propre.
Si vous faites cela comme une expérience d'apprentissage, probablement envie de commencer aussi bas niveau que vous le pouvez, à voir le réel, d'écrous et de boulons. Ce qui signifie que vous voudrez probablement commencer avec un SocketServer, à l'aide d'une connexion TCP (TCP est essentiellement garanti la livraison de données; UDP ne l'est pas).
Google pour une simple exemple de code. Le réglage de l'un est très facile. Mais vous devez définir tous les détails de votre protocole de communication: qui fin de l'envoie de quand et de quoi, de qui la fin est à l'écoute et quand, exactement ce que l'auditeur s'attendre, est-il répondre pour confirmer la réception, etc.
Je ne fais que très peu de programmation en C, mais je suis très heureux, je le sais, parce qu'il me donne une plus grande profondeur de la compréhension de ce qu'un langage de haut niveau sont en train de faire en coulisses avec la mémoire et des types de données complexes. Je pense que la même chose est vraie de la programmation socket: on aurait presque jamais aller au niveau TCP pour une application de production, mais certains exercices, à ce niveau, d'apporter une meilleure compréhension de ce que le niveau supérieur des cadres sont en train de faire.
Pirie: Oui, mais pensez-vous à un débutant doit apprendre le C (ou assemblée) premier? Je ne le pense pas. Je pense que la tendance naturelle est de savoir de haut niveau, d'abord, puis allez vers le bas autant que nécessaire pour comprendre le faible niveau des concepts plus tard, après que le général concepts sont bien tirés. Mon point est que le cadre devrait venir en premier.
OriginalL'auteur John Pirie
Aussi, découvrez Pyro (Python objets accès distant). Se cette réponse pour plus de détails.
Pyro, fondamentalement vous permet de publier Python instances d'objet comme des services qui peuvent être appelées à distance. Pyro est probablement la façon la plus simple à mettre en œuvre Python-python processus de communication.
OriginalL'auteur codeape
Il est également intéressant de regarder Kamaelia pour ce genre de chose - il d'origine de cas d'utilisation a été de systèmes de réseau, et facilite la création de telles choses relativement intuitive.
Quelques liens: Vue d'ensemble de base TCP système, Simple serveur de Chat, La construction d'un protocole en couche, rendez-vous à travers de la façon dont évoluent les nouveaux composants. Autre extrême: le P2P système radio: source, peer.
Si cela fait une différence, nous avons testé si le système est accessible pour les novices grâce à la participation au google summer of code 3 ans dans une rangée, de manière très active à la fois expérimentés et inexpérimentés développeurs. Tous d'entre eux ont réussi à construire des systèmes utile.
Essentiellement, si vous n'avez jamais joué avec unix pipelines idées devraient être familiers.
Mise en garde: j'ai écrit de grands morceaux de Kamaelia 🙂
Si vous voulez apprendre comment faire ces choses-là, de jouer avec les différentes approches de sens, et vous devriez certainement vérifier Tordue (la réponse standard à cette question), Pyro & de la bibliothèque standard d'outils. Chacun a une approche différente, et leur apprentissage va certainement vous intéresser!
Cependant, comme nosklo, je déconseille l'utilisation de la bibliothèque de socket directement et utiliser une bibliothèque au lieu tout simplement parce qu'il est beaucoup beaucoup plus difficile d'obtenir les sockets de programmation correct que les gens ont tendance à réaliser.
OriginalL'auteur Michael Sparks