Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.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时发生SSL解密错误_Java_Node.js_Ssl_Grpc_Grpc Java - Fatal编程技术网

Java 使用GRPC时发生SSL解密错误

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 在进行此调用之前,我应该清理任何其他资源,还是应该使用其他机制来

我正在连接到NodeJS服务器的GRPC客户端上使用GRPC版本:1.1.2和JDK版本:1.8。Java客户机能够很好地连接,但是当我断开与客户机的连接时,我总是在服务器端看到下面的异常

异常(仅在服务器上)

我正在通过以下调用关闭GRPC Java连接:

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.");
}