小编Avi*_*oss的帖子

gRPC 客户端失败并显示“已取消:io.grpc.Context 已取消且没有错误”

我有一个用 C++ 编写的 gRPC 服务器和一个用 Java 编写的客户端。使用阻塞存根一切工作正常。然后我决定将其中一个调用更改为异步,因此我在客户端中创建了一个额外的存根,该存根是使用 newStub(channel) 而不是 newBlockingStub(channel) 创建的。我没有在服务器端进行任何更改。这是一个简单的一元 RPC 调用。

所以我改变了

Empty response = blockingStub.callMethod(request);
Run Code Online (Sandbox Code Playgroud)

asyncStub.callMethod(request, new StreamObserver<Empty>() {
    @Override
    public void onNext(Empty response) {
       logInfo("asyncStub.callMethod.onNext");
    }

    @Override
    public void onError(Throwable throwable) {
       logError("asyncStub.callMethod.onError " + throwable.getMessage());
    }

    @Override
    public void onCompleted() {
        logInfo("asyncStub.callMethod.onCompleted");
    }
});
Run Code Online (Sandbox Code Playgroud)

从那时起,当我使用这个 RPC 时(大多数时候),onError 就会被调用,它给出的错误是“CANCELLED: io.grpc.Context was cancelled without error”。我读到过有关在 RPC 调用中进行 RPC 调用时分叉 Context 对象的内容,但这里的情况并非如此。另外,上下文似乎是一个服务器端对象,我不明白它与客户端有何关系。这是传播回客户端的服务器端错误吗?在服务器端,一切似乎都成功完成,所以我不知道为什么会发生这种情况。在调用 asyncStub.callMethod 之后插入 1ms 睡眠似乎可以使这个问题消失,但达不到目的。任何有助于理解这一点的帮助将不胜感激。

一些注意事项:

  1. 服务器端的处理时间在1微秒左右
  2. 到目前为止,阻塞调用的往返时间是几百微秒(这是我试图缩短的时间,因为这本质上是一个空函数,所以我不需要等待响应)
  3. 该方法会连续调用多次,因此以前它会等待前一个方法完成,现在它们只是一个接一个地调用。
  4. proto 文件中的一些片段:
service EventHandler {
  rpc callMethod(Msg) …
Run Code Online (Sandbox Code Playgroud)

grpc grpc-java

8
推荐指数
1
解决办法
7898
查看次数

我可以从random_device和mt19937的组合生成加密安全的随机数据吗?

我需要在c ++ 11中生成加密安全的随机数据,我担心对所有数据使用random_device会严重限制性能(参见Stephan T. Lavavej的" rand()Considered Harmful "第23页,他说当他测试它(在他的系统上)时,random_device是1.93 MB/s而mt19937是499 MB/s)因为这个代码将在移动设备上运行(Android通过JNI和iOS),这可能比上面的数字慢.

另外我知道mt19937不是加密安全的,来自维基百科:"观察足够数量的迭代(在MT19937的情况下为624,因为这是生成未来迭代的状态向量的大小)允许一个预测所有未来的迭代".

考虑到上述所有信息,我是否可以通过mt19937的每624次迭代从random_device生成一个新的随机种子来生成加密安全的随机数据?或者(可能)更好,每X次迭代,其中X是1到624之间的随机数(来自random_device或者random_device播种的mt19937)?

c++ random cryptography mersenne-twister c++11

7
推荐指数
2
解决办法
1567
查看次数

标签 统计

c++ ×1

c++11 ×1

cryptography ×1

grpc ×1

grpc-java ×1

mersenne-twister ×1

random ×1