localhost:port
должен быть в основном таким же быстрым, как Unix Domain Socket (UDS). Основной вариант использования UDS - для лучшего контроля разрешений и безопасности, так как применяются разрешения для файлов Unix.
Java не поддерживает UDS. Таким образом, чтобы получить grpc-java с использованием UDS, вы должны использовать JNI-компонент, такой как netty-transport-epoll или netty-transport-kqueue.
grpc-java не предоставляет готовую поддержку UDS, но вы можете объединить части самостоятельно:
// You are responsible for shutting down 'elg' and 'boss'. You
// may want to provide a ThreadFactory to use daemon threads.
EventLoopGroup elg = new EpollEventLoopGroup();
ManagedChannel chan = NettyChannelBuilder
.forAddress(new DomainSocketAddress("filename"))
.eventLoopGroup(elg)
.channelType(EpollDomainSocketChannel.class)
.build();
EventLoopGroup boss = new EpollEventLoopGroup(1);
Server serv = NettyServerBuilder
.forAddress(new DomainSocketAddress("filename"))
.bossEventLoopGroup(boss)
.workerEventLoopGroup(elg)
.channelType(EpollServerDomainSocketChannel.class)
.build();
Единственная задача группы цикла событий «босс» - accept()
новые соединения. Если скорость новых подключений низкая, вы можете использовать elg
для bossEventLoopGroup()
.
Вы должны поделиться elg
как можно больше между Channel
с и Server
с.
Epoll недоступен в OS X, поэтому вам нужно будет использовать kqueue. Для kqueue используйте KQueueEventLoop
, KQueueDomainSocketChannel
и KQueueServerDomainSocketChannel
вместо их аналогов epoll.