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
服务,SayHello
端点接受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 });
}
}
答案 0 :(得分:2)
1.1.x dashboard似乎表明版本1.1.0仍然存在Windows上的乒乓计时问题 - https://github.com/grpc/grpc/issues/8806。这似乎是在当前主机和v1.2.x中修复的。请使用1.2.0-pre1 nugets进行验证(我们现在非常接近1.2.0版本,因此官方1.2.0软件包很快就会推出 - 与此同时,收到您的确认将非常有用)