Создание соединения между двумя компьютерами в Python - PullRequest
12 голосов
/ 02 июня 2009

Вопрос: Как мне создать приложение Python, которое может подключаться и отправлять пакеты через Интернет на другой компьютер, на котором работает то же приложение? Можно ли использовать какой-либо существующий код / ​​библиотеку?

Предыстория: я довольно новичок в программировании (HS Senior). Я создал много простых вещей в Python, но недавно я решил начать с более крупного проекта. Я подумываю над созданием симулятора проекта «Волшебство: ускоритель сбора», но я не уверен, выполнимо ли это, учитывая мой набор навыков, поэтому я спрашиваю, прежде чем начать. Приложению потребуется передавать данные между компьютерами о том, какие карты отбираются / передаются.

Спасибо!

Ответы [ 6 ]

13 голосов
/ 02 июня 2009

Twisted - это управляемый событиями Python сетевой движок, лицензированный под MIT. Означает, что одна машина может взаимодействовать с одной или несколькими другими машинами, в то же время делая другие вещи между данными, полученными и отправленными, все асинхронно и запустив один поток / процесс.

Он поддерживает множество протоколов "из коробки", так что вы также можете использовать существующий. Это лучше, потому что вы получаете поддержку протокола от стороннего программного обеспечения (т. Е. Использование HTTP для связи означает, что программное обеспечение промежуточного программного обеспечения, которое использует HTTP, будет совместимым: прокси и т.

Это также упрощает создание собственного протокола связи, если вы этого хотите.

Документация заполнена примерами.

7 голосов
/ 02 июня 2009

Стандартная библиотека включает в себя SocketServer (задокументировано здесь ), который может делать то, что вы хотите.

Однако мне интересно, может ли быть лучшее решение использовать очередь сообщений. Много хороших реализаций уже существует, включая интерфейсы Python. Я использовал RabbitMQ раньше. Идея состоит в том, что компьютеры подписываются на очередь и могут отправлять или прослушивать события.

3 голосов
/ 02 июня 2009

Отличным местом для начала является стандартная библиотека Python . В частности, есть несколько разделов, которые будут актуальны:

Поскольку вы упомянули, что у вас нет опыта в этом, я бы предложил начать с реализации на основе HTTP. Протокол HTTP довольно прост и с ним легко работать. Кроме того, есть хорошие платформы для поддержки этой операции, такие как webpy для сервера и HTTPLib из стандартной библиотеки для клиента.

Если вы действительно хотите погрузиться в работу с сетью, реализация на основе socket может быть полезной. Это научит вас основным концепциям, которые используются в партиях сетевого кода, в то же время получая интерфейс, похожий на файловый поток.

1 голос
/ 03 июня 2009

Стоит также взглянуть на Камаэлия для такого рода вещей - его оригинальный вариант использования был сетевыми системами, и делает создание таких вещей относительно интуитивно понятным. Некоторые ссылки: Обзор базовой системы TCP , Сервер простого чата , Создание многоуровневого протокола , пошаговое руководство по развитию новых компонентов . Другая крайность: P2P радиосистема: источник , peer .

Если это имеет какое-то значение, мы проверили, доступна ли система для новичков, приняв участие в летнем коде Google 3 года подряд, активно принимая на работу как опытных, так и неопытных разработчиков. Всем им удалось построить полезные системы.

По сути, если вы когда-либо играли с конвейерами Unix, идеи должны быть знакомы.

Предостережение: я написал основные куски Камаэлии: -)

Если вы хотите научиться делать эти вещи, хотя, игра с несколькими различными подходами имеет смысл, и вам обязательно нужно проверить Twisted (стандартный ответ на этот вопрос), Pyro и стандартные инструменты библиотеки. У каждого свой подход, и изучение их определенно принесет вам пользу!

Однако, как и nosklo, я бы рекомендовал не использовать библиотеку сокетов напрямую и использовать вместо нее библиотеку - просто потому, что правильное программирование сокетов намного сложнее, чем люди думают.

1 голос
/ 02 июня 2009

Кроме того, проверьте Pyro (объекты удаленного взаимодействия Python). Se этот ответ для более подробной информации.

Pyro в основном позволяет публиковать экземпляры объектов Python как сервисы, которые можно вызывать удаленно. Pyro, вероятно, самый простой способ реализовать взаимодействие между процессами Python-python.

1 голос
/ 02 июня 2009

Связь будет происходить с розетками, так или иначе. Просто вопрос о том, используете ли вы существующие высокоуровневые библиотеки или накатываете свои.

Если вы делаете это в качестве учебного опыта, возможно, вы хотите начать как можно более низко, чтобы увидеть реальные гайки и болты. Это означает, что вы, вероятно, захотите начать с SocketServer , используя TCP-соединение (TCP в основном гарантирует доставку данных; UDP - нет).

Google для простого примера кода. Настройка очень проста. Но вам придется определить все детали вашего протокола связи: какой конец отправляет, когда и что, какой конец слушает и когда, чего именно ожидает слушатель, отвечает ли он для подтверждения получения и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...