Обзор
Клиенты могут быть запущены напрямую router’ом, когда они перечислены в файле clients.config . Эти клиенты могут быть “управляемыми” или “неуправляемыми”. Это обрабатывается ClientAppManager. Кроме того, управляемые или неуправляемые клиенты могут регистрироваться в ClientAppManager, чтобы другие клиенты могли получить ссылку на них. Также есть простой механизм Port Mapper для клиентов, позволяющий регистрировать внутренний порт, который другие клиенты могут найти.
Управляемые клиенты
Начиная с релиза 0.9.4, router поддерживает управляемые клиенты. Управляемые клиенты создаются и запускаются с помощью ClientAppManager. ClientAppManager поддерживает ссылку на клиент и получает обновления о состоянии клиента. Управляемые клиенты являются предпочтительными, поскольку гораздо проще реализовать отслеживание состояния и запускать и останавливать клиент. Также гораздо проще избежать статических ссылок в коде клиента, которые могут привести к чрезмерному использованию памяти после остановки клиента. Управляемые клиенты могут запускаться и останавливаться пользователем в консоли router, и останавливаются при завершении работы router.
Управляемые клиенты реализуют либо интерфейс net.i2p.app.ClientApp, либо net.i2p.router.app.RouterApp. Клиенты, реализующие интерфейс ClientApp, должны предоставить следующий конструктор:
public MyClientApp(I2PAppContext context, ClientAppManager listener, String[] args)
Клиенты, реализующие интерфейс RouterApp, должны предоставить следующий конструктор:
public MyClientApp(RouterContext context, ClientAppManager listener, String[] args)
Предоставленные аргументы указываются в файле clients.config.
Неуправляемые клиенты
Если главный класс, указанный в файле clients.config, не реализует управляемый интерфейс, он будет запущен с помощью main() с указанными аргументами и остановлен с помощью main() с указанными аргументами. Router не поддерживает ссылку, поскольку все взаимодействия осуществляются через статический метод main(). Консоль не может предоставить пользователю точную информацию о состоянии.
Зарегистрированные клиенты
Клиенты, управляемые или неуправляемые, могут регистрироваться в ClientAppManager, чтобы другие клиенты могли получить ссылку на них. Регистрация происходит по имени. Известные зарегистрированные клиенты:
console, i2ptunnel, Jetty, outproxy, update
Преобразователь портов
Router также предоставляет простой механизм для клиентов, позволяющий найти внутренний сервис сокетов, такой как HTTP-прокси. Это обеспечивается Port Mapper. Регистрация осуществляется по имени. Клиенты, которые регистрируются, обычно предоставляют внутренний эмулированный сокет на этом порту.