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
endpoint接受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.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
由于客户端身份验证被用作授权许可,所以不需要其他授权请求。