Изменение роли клиент / сервер с помощью SimpleXMLRPCServer в Python

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

Проблема в том, что модель клиент / сервер обратна тому, что я хочу сделать. Вместо того чтобы RPC-сервер работал на клиентском компьютере и предоставлял сервис программному клиенту, я бы хотел, чтобы сервер прослушивал соединения от клиентов, которые подключают и предоставляют сервис серверу.

Я думал о туннелировании, удаленной переадресации портов с использованием SSH или VPN, но эти варианты не очень хорошо масштабируются и создают больше издержек и сложности, чем хотелось бы.

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

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

2 ответа

Решение

То, что вы хотите, это, вероятно, маршрутизированный RPC WAMP. Кажется, это решает вашу проблему, и это очень удобно, когда вы привыкнете к ней

Идея состоит в том, чтобы поместить маршрутизатор WAMP (скажем) в облако, и вызывающий RPC и вызываемый RPC являются клиентами с исходящими подключениями к маршрутизатору.

Я также использовал VPN для соединения устройств IoT через Интернет, но переключение на эту модель маршрутизатора действительно упростило ситуацию, и оно довольно хорошо масштабируется.

Кстати WAMP реализован на разных языках, включая Python.

Может быть, Pyro может быть полезен? Это позволяет для многих форм распределенных вычислений в Python. Вы не очень четко понимаете свои требования, поэтому трудно сказать, сработает ли это для вас, но я советую вам взглянуть на документацию или на множество примеров Pyro и посмотреть, есть ли что-то, что соответствует вашему желанию.,

Pyro абстрагирует большинство сетевых сложностей, вы просто вызываете метод (удаленного) объекта python.

Другие вопросы по тегам