Пример #1
0
        static async Task Main(string[] args)
        {
            var serviceName  = "grpctest";
            var consulClient = new ConsulClient(c => c.Address = new Uri("http://localhost:8500"));
            var services     = await consulClient.Catalog.Service(serviceName);

            if (services.Response.Length == 0)
            {
                throw new Exception($"未发现服务 {serviceName}");
            }

            var service = services.Response[0];
            var address = $"http://{service.ServiceAddress}:{service.ServicePort}";

            Console.WriteLine($"获取服务地址成功:{address}");

            //启用通过http使用http2.0
            AppContext.SetSwitch(
                "System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);
            var channel   = GrpcChannel.ForAddress(address);
            var catClient = new LuCat.LuCatClient(channel);
            var catReply  = await catClient.SuckingCatAsync(new Empty());

            Console.WriteLine("调用撸猫服务:" + catReply.Message);
            Console.ReadKey();
        }
Пример #2
0
        static async Task Main(string[] args)
        {
            Console.WriteLine("gRPC Client Start..");

            var channel = GrpcChannel.ForAddress("https://localhost:5001");

            //var client = new Greeter.GreeterClient(channel);
            //var reply =  client.SayHelloAsync(new HelloRequest { Name = "Sora" });
            //Console.WriteLine("Greeter 服务返回数据: " + reply.Message);

            var catClient = new LuCat.LuCatClient(channel);
            var catReply  = await catClient.SuckingCatAsync(new SuckingCatRequest { Name = "Haru" });

            Console.WriteLine("Cat 服务返回数据: " + catReply.Name);

            catReply = await catClient.JumpCatAsync(new SuckingCatRequest { Name = "贪生怕死角斗士" });

            Console.WriteLine("Cat 服务返回数据: " + catReply.Name);

            catReply = await catClient.JumpCatAsync(new SuckingCatRequest { Name = "勇往直前少女心" });

            Console.WriteLine("Cat 服务返回数据: " + catReply.Name);


            Console.ReadKey();
        }
Пример #3
0
        static async Task Main(string[] args)
        {
            var channel = GrpcChannel.ForAddress("https://localhost:5001");
//            var client = new Greeter.GreeterClient(channel);
//            var reply = await client.SayHelloAsync(
//                new HelloRequest { Name = "晓晨" });
//            Console.WriteLine("调用Greeter服务 : " + reply.Message);

            var catClient = new LuCat.LuCatClient(channel);
//            var catReply = await catClient.SuckingCatAsync(new Empty());
//            Console.WriteLine("调用撸猫服务:"+ catReply.Message);

            //获取猫总数
            var catCount = await catClient.CountAsync(new Empty());

            Console.WriteLine($"一共{catCount.Count}只猫。");
            var rand = new Random(DateTime.Now.Millisecond);

            var cts = new CancellationTokenSource();

            //指定在2.5s后进行取消操作
            cts.CancelAfter(TimeSpan.FromSeconds(2.5));
            var bathCat = catClient.BathTheCat(cancellationToken: cts.Token);
            //定义接收吸猫响应逻辑
            var bathCatRespTask = Task.Run(async() =>
            {
                try
                {
                    await foreach (var resp in bathCat.ResponseStream.ReadAllAsync())
                    {
                        Console.WriteLine(resp.Message);
                    }
                }
                catch (RpcException ex) when(ex.StatusCode == StatusCode.Cancelled)
                {
                    Console.WriteLine("Stream cancelled.");
                }
            });

            //随机给10个猫洗澡
            for (int i = 0; i < 10; i++)
            {
                await bathCat.RequestStream.WriteAsync(new BathTheCatReq()
                {
                    Id = rand.Next(0, catCount.Count)
                });
            }
            //发送完毕
            await bathCat.RequestStream.CompleteAsync();

            Console.WriteLine("客户端已发送完10个需要洗澡的猫id");
            Console.WriteLine("接收洗澡结果:");
            //开始接收响应
            await bathCatRespTask;

            Console.WriteLine("洗澡完毕");
        }
Пример #4
0
        static async Task ClientInterceptorTest()
        {
            //客户端拦截器
            var channel   = GrpcChannel.ForAddress("https://localhost:5001");
            var invoker   = channel.Intercept(new ClientLoggerInterceptor());
            var catClient = new LuCat.LuCatClient(invoker);
            var catReply  = await catClient.SuckingCatAsync(new Empty());

            Console.WriteLine("调用撸猫服务:" + catReply.Message);
        }
Пример #5
0
        static async Task ClientTest()
        {
            //在gRPC实际使用中,在内网通讯场景下,更多的是走http协议,达到更高的效率
            //启用通过http使用http2.0
            AppContext.SetSwitch(
                "System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);
            var channel   = GrpcChannel.ForAddress("http://localhost:5001");
            var catClient = new LuCat.LuCatClient(channel);
            var catReply  = await catClient.SuckingCatAsync(new Empty());

            Console.WriteLine("调用撸猫服务:" + catReply.Message);
        }
Пример #6
0
        static async Task Main(string[] args)
        {
            var channel = GrpcChannel.ForAddress("https://localhost:5001");
            var client  = new Greeter.GreeterClient(channel);
            var reply   = await client.SayHelloAsync(
                new HelloRequest { Name = "晓晨" });

            Console.WriteLine("调用Greeter服务 : " + reply.Message);

            var catClient = new LuCat.LuCatClient(channel);
            var catReply  = await catClient.SuckingCatAsync(new Empty());

            Console.WriteLine("调用撸猫服务:" + catReply.Message);
            Console.ReadKey();
        }
Пример #7
0
        static async Task Main(string[] args)
        {
            // discover endpoints from metadata
            var client = new HttpClient();

            var disco = await client.GetDiscoveryDocumentAsync("http://localhost:5000");

            if (disco.IsError)
            {
                Console.WriteLine(disco.Error);
                return;
            }

            // request token
            var tokenResponse = await client.RequestPasswordTokenAsync(new PasswordTokenRequest
            {
                Address      = disco.TokenEndpoint,
                ClientId     = "ro.client",
                ClientSecret = "secret",

                UserName = "******",
                Password = "******",
                Scope    = "grpc1"
            });

            if (tokenResponse.IsError)
            {
                Console.WriteLine(tokenResponse.Error);
                return;
            }

            Console.WriteLine(tokenResponse.Json);
            Console.WriteLine("\n\n");

            var channel = GrpcChannel.ForAddress("https://localhost:5001");

            var headers = new Metadata {
                { "Authorization", $"Bearer {tokenResponse.Json["access_token"]}" }
            };

            var catClient = new LuCat.LuCatClient(channel);
            var catReply  = await catClient.SuckingCatAsync(new Empty(), headers);

            Console.WriteLine("调用撸猫服务:" + catReply.Message);


            Console.ReadKey();
        }
Пример #8
0
        static async Task Main(string[] args)
        {
            var channel = GrpcChannel.ForAddress("https://localhost:5001");

            //var client = new Greeter.GreeterClient(channel);
            //var reply = await client.SayHelloAsync(new HelloRequest { Name = "Michael" });
            //Console.WriteLine("Greeter 服务返回数据:" + reply.Message);

            var catClient = new LuCat.LuCatClient(channel);
            //var catReply = await catClient.SuckingCatAsync(new Google.Protobuf.WellKnownTypes.Empty());
            //Console.WriteLine("调用撸猫服务:" + catReply.Message);

            var catCount = await catClient.CountAsync(new Google.Protobuf.WellKnownTypes.Empty());

            Console.WriteLine($"一共{catCount.Count}只猫。");
            var rand = new Random(DateTime.Now.Millisecond);

            var bathCat = catClient.BathTheCat();
            // 定义接收吸猫响应逻辑
            var bathCatRespTask = Task.Run(async() =>
            {
                await foreach (var resp in bathCat.ResponseStream.ReadAllAsync())
                {
                    Console.WriteLine(resp.Message);
                }
            });

            // 随机给10个猫洗澡
            for (int i = 0; i < 10; i++)
            {
                await bathCat.RequestStream.WriteAsync(new BathTheCatReq
                {
                    Id = rand.Next(0, catCount.Count)
                });
            }

            // 发送完毕
            await bathCat.RequestStream.CompleteAsync();

            Console.WriteLine("客户端已发送完10个需要洗澡的猫id");
            Console.WriteLine("接收洗澡结果!");

            // 开始接收响应
            await bathCatRespTask;

            Console.WriteLine("洗澡完毕");
        }
Пример #9
0
        static async Task Main(string[] args)
        {
            //AppContext.SetSwitch(
            //    "System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);
            //        var httpClientHandler = new HttpClientHandler();
            //        // Return `true` to allow certificates that are untrusted/invalid
            //        httpClientHandler.ServerCertificateCustomValidationCallback =
            //HttpClientHandler.DangerousAcceptAnyServerCertificateValidator;
            //        var httpClient = new HttpClient(httpClientHandler);



            //var channel = GrpcChannel.ForAddress("https://game.raikay.com/");
            var channel = GrpcChannel.ForAddress("https://game.raikay.com/");//, new GrpcChannelOptions { HttpClient = httpClient }
            //var channel = GrpcChannel.ForAddress("http://us-or-cera-1.natfrp.cloud:33000/", new GrpcChannelOptions { HttpClient = httpClient });//
            // var channel = GrpcChannel.ForAddress("http://game.raikay.com:33000/");

            //LuCat.LuCatClient()  添加LuCat.proto文件后自动生成,和服务端LuCat.proto文件一致
            var catClient = new LuCat.LuCatClient(channel);
            var catReply  = await catClient.SuckingCatAsync(new ParamRequest { Id = 0 });

            Console.WriteLine("" + catReply.Message);
            Console.ReadKey();
        }