Создание соединения между двумя компьютерами в python

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

Фон: я довольно новичок в программировании (HS старший). Я создал много простых вещей в python, но недавно решил начать работу над более крупным проектом. Я подумываю о создании симулятора симулятора Magic: the Gathering, но я не уверен, насколько это возможно, учитывая мой набор навыков, поэтому я прошу об этом, прежде чем я начну. Приложению потребуется отправить данные между компьютерами, по которым собираются или передаются карты.

Спасибо!

Ответ 1

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

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

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

documentation заполняется примерами.

Ответ 2

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

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

Ответ 3

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

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

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

Ответ 4

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

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

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

Ответ 5

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

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

Ответ 6

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

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

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

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

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

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