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

Intel Threading Building Blocks имеет красивый переносимый шаблон atomic, который делает то, что вы хотите. Но может ли это быть небольшая библиотека или нет, конечно, можно обсуждать ..

12
задан Jonik 2 June 2009 в 10:50
поделиться

6 ответов

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

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

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

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

13
ответ дан 2 December 2019 в 05:55
поделиться

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

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

7
ответ дан 2 December 2019 в 05:55
поделиться

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

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

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

3
ответ дан 2 December 2019 в 05:55
поделиться

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

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

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

1
ответ дан 2 December 2019 в 05:55
поделиться

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

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

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

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

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

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

1
ответ дан 2 December 2019 в 05:55
поделиться

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

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

1
ответ дан 2 December 2019 в 05:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: