Java 使用GRPC时发生SSL解密错误
我正在连接到NodeJS服务器的GRPC客户端上使用GRPC版本:1.1.2和JDK版本:1.8。Java客户机能够很好地连接,但是当我断开与客户机的连接时,我总是在服务器端看到下面的异常 异常(仅在服务器上) 我正在通过以下调用关闭GRPC Java连接:Java 使用GRPC时发生SSL解密错误,java,node.js,ssl,grpc,grpc-java,Java,Node.js,Ssl,Grpc,Grpc Java,我正在连接到NodeJS服务器的GRPC客户端上使用GRPC版本:1.1.2和JDK版本:1.8。Java客户机能够很好地连接,但是当我断开与客户机的连接时,我总是在服务器端看到下面的异常 异常(仅在服务器上) 我正在通过以下调用关闭GRPC Java连接: channel.shutdown().awaitTermination(5, TimeUnit.SECONDS); //channel is ManagedChannel 在进行此调用之前,我应该清理任何其他资源,还是应该使用其他机制来
channel.shutdown().awaitTermination(5, TimeUnit.SECONDS); //channel is ManagedChannel
在进行此调用之前,我应该清理任何其他资源,还是应该使用其他机制来彻底断开与服务器的连接
编辑
我注意到,我在尝试以下操作时也会遇到同样的错误:
channel.shutdown();
我在Mac上使用OpenSSL-我记得更改了默认Mac版本(OpenSSL 0.9.8zh 2016年1月14日)
保护grpc中的端点.c
result = tsi_frame_protector_unprotect(ep->protector, message_bytes,
&processed_message_size, cur,
&unprotected_buffer_size_written);
gpr_mu_unlock(&ep->protector_mu);
if (result != TSI_OK) {
gpr_log(GPR_ERROR, "Decryption error: %s",
tsi_result_to_string(result));
break;
}
ManagedChannel.shutdown()
向服务器指示不应再启动新的RPC。所有现有的RPC,特别是流式RPC将继续运行。所有这些RPC完成后,ManagedChannel
将关闭所有基础连接,通道将进入终止状态
ManagedChannel的设计类似于ExecutorService
。要确保真正正确关闭,可以做的一件事是在循环中终止调用:
while (!channel.awaitTermination(5, TimeUnit.Second)) {
System.err.println("Still not terminated.");
}
谢谢-当客户端需要断开连接时,是否有一种干净的方法来结束客户端的双向流?或者是关闭客户端通道的唯一选项,服务器必须检测客户端断开连接并关闭流?您可以从流的StreamObserver调用onCompleted()。
while (!channel.awaitTermination(5, TimeUnit.Second)) {
System.err.println("Still not terminated.");
}