gRPC .net学习

2023-12-14 14:33:54

学习helloworld
server用.net
client有.net的控制台 和 unity

server端 直接使用vs2022创建(需自行看有无装asp.net哦),搜索gPRC,使用6.0吧,创建工程后直接F5跑起来,服务端到此完成
在这里插入图片描述
.net控制台client,创建新的控制台,使用NuGet,然后导入server端的Protos文件夹 在这里插入图片描述
学习helloWrold就先手动copy下目录咯.然后在vs上把其加入ItemGroup中去在这里插入图片描述
在这里插入图片描述
编辑client的代码咯

using Grpc.Net.Client;
using server;
using (var channel = GrpcChannel.ForAddress("https://localhost:5001"))//这个端口要看服务端跑起来的输出日志上的端口哦
{
    var client = new Greeter.GreeterClient(channel);
    var reply = client.SayHello(new HelloRequest()
    {
        Name = "客户端 sayHeloName"
    });
    var msg = reply.Message;
    Console.WriteLine(msg);
}

把服务器跑起来.然后在client跑起来 就能看到log了

server用.net
client有.net的控制台就跑通了

现用Unity连起来,就比较麻烦.这里需要看gitHub
https://github.com/doctorseus/grpc-dotnet-unity
第一种方案:把人家的Plugins直接copy到自己的目录
第二种方案就是在自己的server用NuGet安装人家对应的dll,再用everyThing搜索对应含有NuGet目录的dll_copy到自己plugins目录,举一个例子
在这里插入图片描述
这里要装挺多东西的,建议使用第一种方案.还要把人家GRPCBestHttpHandler.cs,PushPullStream.cs,ServerStreamHttpContent.cs,copy到自己项目中去
再去gitHub的把Best HTTP也导入自己的unity项目中去.
然后去自己Server端项目中,右键greet.proto,重新生成下.生成后把Greet.cs和GreetGRPC.cs copy到unity项目中去 (右键server在磁盘上用everyThing找)
在这里插入图片描述
到此unity的准备工作 都完成了
建新脚本 TestGRPC.cs

using Grpc.Net.Client;
using Grpc.Net.Extensions;
using server;
using UnityEngine;
public class TestGRPC : MonoBehaviour
{
    async void Start()
    {
        Debug.LogError("---开始---");
        var channel = GrpcChannel.ForAddress("https://localhost:5001", new GrpcChannelOptions()
        {
            HttpHandler = new GRPCBestHttpHandler()
        });

        var client = new Greeter.GreeterClient(channel);
        var res = await client.SayHelloAsync(new HelloRequest()
        {
            Name = "造就helloworld"
        });
        Debug.LogError(res.Message);
        Debug.LogError("---结束---");
    }    
}

把TestGRPC.cs 挂在场景中去,把server跑起来…然后在Unity,跑起来.就能看到通信了

https://github.com/SendSi/gRPC_client_server

文章来源:https://blog.csdn.net/SendSI/article/details/134921233
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。