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

gRPC-请求响应性能

唐兴思
2023-03-14

gRPC 1.1.0 C#。NET 4.6 Windows 7/Windows 10

我刚刚在C#中测试了gRPC的性能,对它在计算机之间的性能感到困惑。小消息需要一致的200ms发送/回复时间,而较大的消息(大约1500个字符)是亚毫秒。请参阅下面的客户端/服务器代码。处理小消息是否需要额外的配置?

我的测试遵循以下入门指南:http://www.grpc.io/docs/quickstart/csharp.html

简而言之,有一个Greeter服务,其SayHelloendpoint接受HelloRequest并以HelloResponse响应。

service Greeter {
  // Sends a greeting
  rpc SayHello (HelloRequest) returns (HelloReply) {}
}

message HelloRequest {
  string name = 1;
}

message HelloReply {
  string message = 1;
}

客户

同样,与样品几乎相同。请注意stringLength变量。当设置为1-1200(ish)之间的值时,接收响应的时间始终为200ms

class Program
{
    static void Main(string[] args)
    {
        var channel = new Channel("192.168.82.254", 50051, ChannelCredentials.Insecure);

        var client = new Greeter.GreeterClient(channel);
        var stringLength = 1500;
        for (var x = 0; x < 50; x++)
        {
            var sw = Stopwatch.StartNew();
            var req = new HelloRequest { Name = new String('x', stringLength) };
            var reply = client.SayHello(req);
            sw.Stop();
            Console.WriteLine($"Greeting: {sw.ElapsedMilliseconds} ms");
        }           
        Console.ReadLine();
    }   
}

服务器

非常简单,处理请求并回复。样本的逐字记录。

const int Port = 50051;

static void Main(string[] args)
{
    Server server = new Server
    {
        Services = { Greeter.BindService(new GreeterImpl()) },
        Ports = { new ServerPort("192.168.82.254", Port, ServerCredentials.Insecure) }
    };
    server.Start();

    Console.WriteLine("Greeter server listening on port " + Port);
    Console.WriteLine("Press any key to stop the server...");
    Console.ReadKey();

    server.ShutdownAsync().Wait();
}

class GreeterImpl : Greeter.GreeterBase
{
    // Server side handler of the SayHello RPC
    public override Task<HelloReply> SayHello(HelloRequest request, ServerCallContext context)
    {
        return Task.FromResult(new HelloReply { Message = "Hello " + request.Name });
    }
}

共有1个答案

山寒
2023-03-14

1.1. x仪表板似乎表明版本1.1.0在Windows上仍然存在乒乓计时问题-https://github.com/grpc/grpc/issues/8806.这似乎在当前master和v1.2. x中已修复。请使用1.2.0-pre1 nuget进行验证(我们现在真的接近1.2.0版本,所以官方的1.2.0包很快就会发布-与此同时,您的确认将非常有用)。

主仪表板

 类似资料:
  • 介绍 YurunHttp 的请求响应类,结果类。除了遵循 PSR-7 规范,另外还增加了一些人性化的方法。 类:Yurun\Util\YurunHttp\Http\Response use Yurun\Util\HttpRequest; $http = new HttpRequest; $response = $http->get('http://www.baidu.com'); 方法 响应内

  • 概述 Django 使用Request 对象和Response 对象在系统间传递状态。 当请求一个页面时,Django会建立一个包含请求元数据的 HttpRequest 对象。 当Django 加载对应的视图时,HttpRequest 对象将作为视图函数的第一个参数。每个视图会返回一个HttpResponse 对象。 本文档对HttpRequest 和HttpResponse 对象的API 进行说

  • 在SpringMVC项目中,客户机发送一个带有序列化对象的请求,客户机本身是一个小程序,所以它不希望收到一个web页面作为响应,而是一个带有字符串对象的响应,该响应将告诉他这是成功还是失败。那么解决方案是什么呢?我想在@Controller中使用返回void的方法,或者返回不存在页面的方法?(在这两种情况下,我还想知道是否有回复给客户)

  • HTTP请求和HTTP响应在任何Web应用程序中都发挥着重要作用。 我们需要获取http请求的完整详细信息以便正确处理它。 处理完毕后,我们需要通过http响应将处理后的数据发送给客户端。 FuelPHP提供了出色的Request和Response类,分别用于读写HTTP请求和HTTP响应。 让我们在本章中了解Request和Response类。 Request 在典型的Web应用程序中,应用程序

  • 当我运行我的gRPC客户端,它试图将请求流式传输到服务器时,我收到了这个错误:"TypeError: has typelist_iterator,但期望其中之一:bytes, unicode" 我需要以某种方式对我发送的文本进行编码吗?错误消息有一定的意义,因为我肯定是在传入一个迭代器。我从gRPC留档中假设这是需要的。(https://grpc.io/docs/tutorials/basic/p

  • 由于客户端身份验证被用作授权许可,所以不需要其他授权请求。