Есть пример клиента Spyne?

Я пытаюсь использовать spyne (http://spyne.io) на моем сервере с ZeroMQ и MsgPack. Я следовал примерам программирования на стороне сервера, но не могу найти ни одного примера, который помог бы мне узнать, как программировать на стороне клиента.

Я нашел класс spyne.клиент.zeromq.ZeroMQClient, но я не знаю, что это должен быть параметр " app " его конструктора.

спасибо вперед!

Edit:

(упрощенный) код на стороне сервера:

from spyne.application import Application
from spyne.protocol.msgpack import MessagePackRpc
from spyne.server.zeromq import ZeroMQServer
from spyne.service import ServiceBase
from spyne.decorator import srpc
from spyne.model.primitive import Unicode

class RadianteRPC(ServiceBase):    
    @srpc(_returns=Unicode)
    def whoiam():
        return "Hello I am Seldon!"

radiante_rpc = Application(
    [RadianteRPC],
    tns="radiante.rpc",
    in_protocol=MessagePackRpc(validator="soft"),
    out_protocol=MessagePackRpc()
)

s = ZeroMQServer(radiante_rpc, "tcp://127.0.0.1:5001")
s.serve_forever()

1 ответов


Spyne автор здесь.

есть много проблем с клиентскими транспортами Spyne.

первое и самое главное, что они требуют, чтобы код сервера работал. И это потому, что парсер WSDL Spyne только наполовину сделан, поэтому нет никакого способа передать интерфейс, который сервер предоставляет клиенту.

Как только анализатор Wsdl будет выполнен, клиентские транспорты Spyne также будут возрождены. Они работают просто отлично, хотя тесты проходят, но они (немного) устарели и, как вы заметили, не имеют надлежащих документов.

теперь вернемся к вашему вопросу: параметр app для конструктора клиента-это тот же экземпляр приложения, который переходит в конструктор сервера. Поэтому, если вы сделаете это:

c = ZeroMQClient("tcp://127.0.0.1:5001", radiante_rpc)
print c.service.whoiam()

он будет печатать " Привет, я Селдон!"

вот полный код, который я только что совершил: https://github.com/arskom/spyne/tree/master/examples/zeromq

но:

все при этом вы не должны использовать ZeroMQ для RPC.

Я посмотрел на ZeroMQ для целей RPC, когда его шумиха была на сумасшедших уровнях (я даже получил свое имя в списке участников ZeroMQ :)) мне не понравилось то, что я увидел, и я двинулся дальше.

вставить мои новости.YC комментарий отhttps://news.ycombinator.com/item?id=6089252 здесь:

по моему опыту, ZeroMQ очень хрупок в приложениях, подобных RPC, тем более, что он пытается абстрактные прочь "соединение". Этот мышление очень подходит, когда вы делаете многоадресную рассылку (и ZeroMQ rocks при многоадресной передаче), но для одноадресной передачи я действительно хочу обнаружьте разъединение или отказ соединения и отрегулируйте его соответственно, прежде чем мои исходящие буферы задохнутся до смерти. Итак, я оценка других альтернатив перед использованием ZeroMQ в качестве транспорта для внутренних сообщений типа RPC.

Если вы в порядке с наличием всего сообщения в памяти перед разбор (или отправка) это (Http не так уж плохо, когда дело доходит до передачи огромные документы по сети), написание необработанного документа MessagePack для обычный поток TCP (или заправка его внутри дейтаграммы UDP) будет делать трюк в порядке. Библиотека MessagePack поддерживает парсинг потоков -- см., например, пример Python на своей домашней странице (http://msgpack.org).

Disclosure: я просто счастливый пользователь MessagePack (а иногда и ZeroMQ). Я работаю над Spyne (http://spyne.io) так что я просто имею опыт с некоторыми из самых популярных протоколов.

Кажется, я написал этот комментарий больше года назад. Перемотаем вперед на сегодня, я получил MessagePack транспорт реализован и выпущен в Spyne 2.11. Поэтому, если вы ищете легкий транспорт для внутренней передачи небольших сообщений, я бы рекомендовал использовать его вместо ZeroMQ.

однако, как только вы вне Http-land, вы вернулись к работе с сокетами на системном уровне, которые могут быть или не быть тем, что вы хотите, в зависимости от количества ресурсов, которые вы должны сэкономить для этого бита вашего проекта.

к сожалению, нет никакой документации об этом, кроме примеров, которые я только что собрал здесь:https://github.com/arskom/spyne/tree/master/examples/msgpack_transport

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

надеюсь, это поможет. Патчи приветствуются.

С уважением,