GRPC从客户端到服务器的转发代理

时间:2017-09-18 21:04:47

标签: java node.js proxy grpc

使用nodejs或java中的grpc,使grpc客户端通过代理连接到服务器所需的属性或配置是什么?

我无法找到解释设置的示例或文档。我是否需要在代码中做一些事情?

我支持代理,我不确定问题是我的设置不正确还是我的代理不支持grpc。它支持http / 2作为协议升级。

我在java中的代理设置是:

-Dhttp.proxyHost=xxx.xxx.xxx
-Dhttp.proxyPort=8888 
-Dhttp.nonProxyHosts="*.nowhere.nothing"
-Dhttps.proxyHost=xxx.xxx.com
-Dhttps.proxyPort=8888
-Dhttps.nonProxyHosts="*.nowhere.nothing"
-Dsocks.proxyHost=xxx.xxx.xxx
-Dsocks.proxyPort=8888
-Dsocks.nonProxyHosts="*.nowhere.nothing"

3 个答案:

答案 0 :(得分:1)

从grpc-java 1.0.3开始,您可以使用DataTable形式的值指定环境变量GRPC_PROXY_EXP。 " EXP"意味着实验,因为在grpc-java观察到正常的Java设置(如host:port)之后它将被删除。

答案 1 :(得分:1)

如果您不想使用全局https.proxyHosthttps.proxyPort属性,则可以使用客户端的StubSettings来指定ChannelConfigurator。然后可能看起来像这样:

InetSocketAddress proxyAddress = new InetSocketAddress("my.proxy.local", 8080);
InstantiatingGrpcChannelProvider transportProvider = SessionsStubSettings.defaultGrpcTransportProviderBuilder()
    .setChannelConfigurator(new ApiFunction<ManagedChannelBuilder, ManagedChannelBuilder>() {
        @Override
        public ManagedChannelBuilder apply(ManagedChannelBuilder input) {
            return input.proxyDetector(new ProxyDetector() {
                @Override
                public ProxiedSocketAddress proxyFor(SocketAddress targetServerAddress) throws IOException {
                    if (!(targetServerAddress instanceof InetSocketAddress) || targetServerAddress == null) {
                        return null;
                    } 
                    return HttpConnectProxiedSocketAddress.newBuilder()
                        .setTargetAddress((InetSocketAddress) targetServerAddress)
                        .setProxyAddress(proxyAddress)
                        .build();
                    }
                });
            }
    })
    .build();

然后可以使用stubSettings来创建GRPC客户端:


stubSettings = XYZStubSettings.newBuilder().setTransportChannelProvider(transportProvider);

答案 2 :(得分:0)

在以后的版本中(我认为从1.8.0+开始),您需要:

System.setProperty("http.proxyHost", "http-ip-address-hostname");
System.setProperty("http.proxyPort", "http-port-value");    
System.setProperty("https.proxyHost", "https-ip-address-hostname");
System.setProperty("https.proxyPort", "https-port-value");