当前位置: 首页 > 知识库问答 >
问题:

Grpc:Grpc C++客户端和Grpc java服务器,异步双向流

吕琪
2023-03-14

我试图为双向流API编写一个cpp客户端。

通过下面的客户端代码,我可以在服务器上实例化一个流观察器。但是,问题在于调用服务器StreamObserver上的onNext函数。

// A client-to-server stream RPC to append data
rpc append(stream ratis.common.RaftClientRequestProto)
  returns (stream ratis.common.RaftClientReplyProto) {}
@Override
public void onNext(RaftClientRequestProto request) {
  try {
    final RaftClientRequest r = ClientProtoUtils.toRaftClientRequest(request);
    LOG.info("recieved request " + r.getCallId());
    final PendingAppend p = new PendingAppend(r);
    slidingWindow.receivedRequest(p, this::processClientRequestAsync);
  } catch (Throwable e) {
    responseError(e, () -> "onNext for " + ClientProtoUtils.toString(request));
  }
}
    RaftClientRequestProto req = create_request(read_requet, sizeof(ContainerCommandRequestProto));
    grpc::ClientContext ctx;
    std::shared_ptr<ClientReaderWriter<RaftClientRequestProto, RaftClientReplyProto>> cli_stream(stub->append(&ctx));

    std::thread writer([cli_stream]() {
            RaftClientReplyProto resp;
    std::cout << "goind to read " << std::endl;
    cli_stream->Read(&resp);
    std::cout << "read done" << std::endl;
    });

    std::cout << "Thread started" << std::endl;
    std::this_thread::sleep_for(std::chrono::milliseconds(10000));
    std::cout << "Doing writes" << std::endl;
    cli_stream->Write(req);
    cli_stream->WritesDone();
    std::cout << "writes done" << std::endl;

共有1个答案

凌善
2023-03-14

这个问题是由于protobuf版本的差异造成的。

 类似资料:
  • 异步Mysql客户端 AsyncMysql::query($sql, $usePool = true) 第二个参数设为false将不会使用连接池中的资源,默认都会从连接池中取,配置连接池数量 => config/database.php 具体使用 use AsyncMysql; //设置超时时间 AsyncMysql::setTimeout(2); $res = (

  • 异步Redis客户端 连接池(连接池默认开启) use AsyncRedis; //关闭连接池 AsyncRedis::enablePool(false); //开启连接池 AsyncRedis::enablePool(true); 使用AsyncRedis use AsyncRedis; //设置超时时间 AsyncRedis::s

  • 异步Http客户端 Get方式 1.使用域名形式 use AsyncHttp; //直接使用域名, get方式 $http = new AsyncHttp('http://groupco.com'); //设置2s超时 $http->setTimeout(2); //$http->setCookies(['token' => 'xxxx']);

  • 异步Tcp客户端 串行发包 use AsyncTcp; $tcp = new AsyncTcp('127.0.0.1', 9501); $tcp->setTimeout(2); //串行发送 $res = (yield $tcp->call('hello server!')); $res = (yield $tcp->call('hello serv

  • C Async描述了如何创建一个异步服务器和一个相应的异步客户机来与之通信。我已经在微软ViualStudio中创建了这个。 我现在需要一个java客户端说话的C服务器-我无法找到一个Java等效的客户端(到C)与C通信。 任何指点都将不胜感激

  • 本文向大家介绍Java--Socket通信(客户端服务端双向),包括了Java--Socket通信(客户端服务端双向)的使用技巧和注意事项,需要的朋友参考一下 新建两个工程,一个客户端,一个服务端,先启动服务端再启动客户端 两个工程的读写操作线程类基本上完全相同 服务端: 客户端:  以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。