Пост Дуга Режущего в GrokBase состояния:
В настоящее время для каждого протокола требуется отдельный ответчик. Если HTTP
используется, различные ResponderServlet могут быть настроены так, чтобы
разные протоколы запускаются по разным URL. Для NettyServer и
SaslSocketServer должен запускать разные протоколы на разных портах.
Обратите внимание, что можно создать протокол, который представляет собой комбинацию
несколько других протоколов и обслуживают это. Например, с Java
отражение, если у вас есть интерфейс Java A, это один протокол и Java
Интерфейс B это еще один, то вы можете реализовать "интерфейс C расширяет
A, B "и обслуживают этот протокол. Клиенты, которые говорят на A, B или C
затем можно подключиться. Подобный эффект может быть достигнут с помощью Java
конкретный компилятор путем импорта различных клиентских протоколов в
протокол сервера.
http://avro.apache.org/docs/current/idl.html#imports
Таким образом, альтернативой является создание protocol
, который "реализует" все ваши протоколы, такие как:
@namespace("foo.bar")
protocol AllProtocols {
import idl "foo.avdl"
import idl "bar.avdl"
}
и создание вашего класса, который реализует этот протокол:
object AllProtocolsImpl : AllProtocols {
override fun foo(): Void? {return null}
override fun bar(): Void? {return null}
} * * тысяча двадцать-один
затем создайте сервер, который обслуживает этот протокол:
val server = NettyServer(SpecificResponder(AllProtocols.PROTOCOL, AllProtocolsImpl), InetSocketAddress(9090))
Любой клиент, которому требуется Foo или Bar, может подключиться к этому серверу и использовать его протокол.