勇哥注:
本文其实是微软官方对于gRPC通讯在.net 8中应用的介绍。
微软官方介绍:
(一)创建服务端
在vs2022中,搜索grpc,选择创建grpc的项目。
创建的解决方案中,我们看到自动引用grpc的包。
如果它为感叹号,请编译一次程序,就好了。
这个服务端项目不需要做任何修改,请直接运行。
运行后,可以看到已经暴露了http的请求地址:
我们用浏览器访问这个地址:
出现下面这个信息
An HTTP/1.x request was sent to an HTTP/2 only endpoint.
试图连接的服务器或服务的端点(endpoint)只支持HTTP/2,并不接受HTTP/1.x的请求
因为gRPC是要求http/2的请求的。
有关http/1.x和http/2的背景知识如下:
HTTP/1.x:这是HTTP的早期版本,其中“x”通常代表1或0(也就是HTTP/1.0或HTTP/1.1)。 HTTP/1.x使用文本格式来传输数据,并且每次请求和响应都需要一个新的TCP连接 (虽然HTTP/1.1引入了持久连接来复用TCP连接)。 HTTP/2:这是HTTP的一个新版本,它带来了许多改进,包括多路复用 (允许单个TCP连接上并发多个请求/响应)、头部压缩(减少请求和响应头的大小)、 服务器推送(允许服务器主动发送资源到客户端)等。 HTTP/2使用二进制格式来传输数据,这使其更加高效。
我们再试下https的访问:
这个信息的意思是:
不能直接使用 HTTP 客户端(如 curl、Postman、普通的 HTTP 库等)来与 gRPC 端点通信。
相反,你需要使用专门设计的 gRPC 客户端库来与服务端进行通信。
因此,我们其实不能用浏览器直接访问,需要由gRPC客户端程序来访问。
(二)创建客户端
客户端我们创建一个控制台程序。
先来引用包,有三个,在包控制台中使用下面指令安装:
Install-Package Grpc.Net.Client
Install-Package Google.Protobuf
Install-Package Grpc.Tools
然后把服务器端的Protos目录拷贝过来。
只用修改一下它的命名空间:
这个命名空间就是你的控制台程序的命名空间,要保持一样。
点击ConsolApp1,在它的配置文件中,添加
<ItemGroup> <Protobuf Include="Protos\greet.proto" GrpcServices="Client" /> </ItemGroup>
最后在Program.cs中敲入代码:
注意勇哥这里没有启动用顶级语句,所以你得自己把Main函数加上async。
目前在.NET中,已经完全推荐异步代码了。所以gRPC的这些库函数也都是异步调用了。
另外注意一点,我们必须调用https,不能用http。
所以下面的localHost:7275 端口号就是要写成服务器暴露出来的https端口号。
internal class Program { static async Task Main(string[] args) { //Console.WriteLine("Hello, World!"); using var channel = GrpcChannel.ForAddress("https://localhost:7275"); var client = new Greeter.GreeterClient(channel); var reply = await client.SayHelloAsync( new HelloRequest { Name = "GreeterClient" }); Console.WriteLine("Greeting: " + reply.Message); Console.WriteLine("Press any key to exit..."); Console.ReadKey(); } }
结果如下:
Hello GreeterClinet这段话,就是服务器端返回的。
下面就是服务器端的SayHello。
链接:https://pan.baidu.com/s/1LI3YGjnBvLG7CykLYQzTOg
提取码:vwwa
--来自百度网盘超级会员V6勇哥的分享
---------------------
作者:hackpig
来源:www.skcircle.com
版权声明:本文为博主原创文章,转载请附上博文链接!

