2016-09-21 9 views
2

В Apache Thrift можно создать общий прокси? Напр. в прокси-сервере я хочу сделать запрос/отклик или измерить производительность. Поток должен быть как Клиент < -> Общий прокси < -> Сервер для всех вызовов RPC.Как реализовать общий прокси-сервер Thrift?

+0

Примечание для близких избирателей: этот вопрос не касается инфраструктуры сервера. – JensG

ответ

3

Внедряйте собственный «многоуровневый» протокол или специальный транспортный трюк, который перехватывает ваши вызовы по мере необходимости.

Многие языки приняли multiplexed protocol, который использует общий TProtocolDecorator. Эта часть кода выглядит очень удобно для этой задачи. Посмотрите на implementation of TMultiplexedProtocol, чтобы узнать, как он используется. В основном класс TProtocolDecorator делает большую часть магии, вам нужно только переопределить некоторые методы и подключить недавно разработанный протокол к стеку транспорта/протокола Thrift, как обычно.

В качестве альтернативы, ваша цель может быть достигнута путем добавления многоуровневого транспорта, аналогичного TBufferedTransport. Но в этом случае у вас нет семантики данных, вы видите только строки, тогда как на уровне протокола у вас есть методы вроде WriteMessageBegin или ReadMessageBegin, которые делают жизнь намного проще.

+0

Если я использую мультиплексированный протокол, мой прокси-сервер больше не является общим, не так ли? В этом случае мне нужно зарегистрировать все процессоры. –

+1

Я упомянул мультиплексный протокол как ** пример **. Я не рекомендовал использовать мультиплекс в коде, что бы не помогло вам здесь. Вместо этого вы хотите использовать его в качестве плана для своего собственного протокола, который вы хотите разработать поверх «TProtocolDecorator» для достижения ваших целей. – JensG