Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java GRPC通过转发代理从客户端到服务器_Java_Node.js_Proxy_Grpc - Fatal编程技术网

Java GRPC通过转发代理从客户端到服务器

Java GRPC通过转发代理从客户端到服务器,java,node.js,proxy,grpc,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.prox

使用来自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"

由于grpc java 1.0.3,您可以使用
host:port
格式的值指定环境变量
grpc\u PROXY\u EXP
。“EXP”表示实验性的,因为它将在grpc java观察正常java设置(如
https.proxyHost
)后被删除。

在以后的版本中(我认为从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");

如果您不想使用全局
https.proxyHost
https.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 = XYZStubSettings.newBuilder().setTransportChannelProvider(transportProvider);