当前位置: 首页 > news >正文

威海做网站公司苏州百度 seo

威海做网站公司,苏州百度 seo,电子商务网站开发课程设计,网站建设里面链接打不开一、双向流处理概述 简单来讲客户端可以向服务端发送消息流,服务端也可以向客户端传输响应流,即客户端和服务端可以互相通讯客户端无需发送消息即可开始双向流式处理调用 。 客户端可选择使用 RequestStream.WriteAsync 发送消息。 使用 ResponseStream…

一、双向流处理概述

  1. 简单来讲客户端可以向服务端发送消息流,服务端也可以向客户端传输响应流,即客户端和服务端可以互相通讯
  2. 客户端无需发送消息即可开始双向流式处理调用 。 客户端可选择使用 RequestStream.WriteAsync 发送消息。 使用 ResponseStream.MoveNext() 或 ResponseStream.ReadAllAsync() 可访问从服务流式处理的消息。ResponseStream 没有更多消息时,双向流式处理调用完成。

二、案例简介

  1. 客户端发送请求流通过equestStream.WriteAsync传入到服务端
  2. 服务端响应到客户端的流通过ResponseStream.WriteAsync写入到客户端
  3. 服务端使用System.Threading.Channels保证线程安全交互

三、服务端配置(注意:grpc相关配置参考我之前的文章)

  1. 配置.proto文件
// 1.提供公共的实体proto文件
// 2.服务引用对应的proto文件
// 3.定义三个客户流方法//定义messages.proto文件令需要注意项目文件中的特性GrpcServices=None;syntax = "proto3";option csharp_namespace = "GrpcProject";package grpc.serviceing;// 消息推送/接收实体
message ExampleMessage
{string msg = 1;
}// 双向流文件twowaystream.protosyntax = "proto3";import "Protos/messages.proto";option csharp_namespace = "GrpcProject";package grpc.serviceing;service BothWaysRpc{// 双向流rpc StreamingBothWays(stream ExampleMessage) returns (stream ExampleMessage);
}
  1. 1 服务接口实现
    /// <summary>/// 双向流服务/// </summary>public class BothWaysService : BothWaysRpc.BothWaysRpcBase{/// <summary>/// 自动重置事件/// </summary>private readonly ManualResetEventSlim _event;public BothWaysService(){_event = new ManualResetEventSlim(false);}public override async Task StreamingBothWays(IAsyncStreamReader<ExampleMessage> requestStream,IServerStreamWriter<ExampleMessage> responseStream,ServerCallContext context){// 创建线程安全的有限容量通道var channel = Channel.CreateBounded<ExampleMessage>(new BoundedChannelOptions(capacity: 5));var task = Task.Run(async () =>{await foreach (var message in requestStream.ReadAllAsync()){// 读取消息 写入通道if (!string.IsNullOrWhiteSpace(message.Msg)){await Console.Out.WriteLineAsync($"记录客户端传入消息:{message.Msg}");// todo 消息处理await channel.Writer.WriteAsync(message, context.CancellationToken);}}}, context.CancellationToken);await foreach (var message in channel.Reader.ReadAllAsync()){// 打印通道接收的消息await Console.Out.WriteLineAsync($"通道传入消息:{message.Msg}");// 写入响应流ExampleMessage exampleMessage = new ExampleMessage() { Msg = $"我已经接收到消息:{message.Msg}" };await responseStream.WriteAsync(exampleMessage);if (message.Msg.ToLower() == "exit"){break;}}// 完结写入通道channel.Writer.Complete();await task;}}
  1. 2 Program注入
    public class Program{public static void Main(string[] args){var builder = WebApplication.CreateBuilder(args);builder.Services.AddGrpc();var app = builder.Build();// 一元方法//app.MapGrpcService<DollarService>();// 客户端流//app.MapGrpcService<ClientStreamService>();// 服务端流//app.MapGrpcService<ServerStreamService>();// 双向流app.MapGrpcService<BothWaysService>();app.Run();}}

四、客户端配置

  1. 引用proto文件,配置为客户端类型
  2. 根据编译生成的函数进行传参调用
  3. 创建WPF测试客户端

button按钮触发grpc

 

    /// <summary>/// BothWaysClient.xaml 的交互逻辑/// </summary>public partial class BothWaysClient : Window{public BothWaysClient(){InitializeComponent();}private async void Excute_Click(object sender, RoutedEventArgs e){Action<string> action = str => { txtValue.Text += $"{str}\r\n"; };await WpfClient.Show(action);txtValue.Text += "\r\n\r\n";}}

grpc客户端接口调用

        /// <summary>/// 双向流/// </summary>/// <param name="action"></param>/// <returns></returns>public static async Task Show(Action<string> action){var messages = new List<string>(){"test","one","two","three","false","four","Oooo","dddd","vvvfff","exit"};Random rnd = new Random(20);var channel = GrpcChannel.ForAddress("https://localhost:7188");var client = new GrpcProject.BothWaysRpc.BothWaysRpcClient(channel);var bothWays = client.StreamingBothWays();var requestTask = Task.Run(async () =>{while (true){var index = rnd.Next(messages.Count);var msg = messages[index];await bothWays.RequestStream.WriteAsync(new ExampleMessage { Msg = msg });if (msg == "exit"){break;}}});await foreach (var item in bothWays.ResponseStream.ReadAllAsync()){action(item.Msg);if (item.Msg == "我已经接收到消息:exit"){break;}}await requestTask;}

五、执行结果

服务端:

 客户端:

 六、源码地址

链接:https://pan.baidu.com/s/1uCirfbexPJ7C-AujBVtkCQ 
提取码:sd4y

七、后续进阶简介

  1. 接下来会讲解客户端工厂,优化客户端请求地址使用依赖注入提取各个服务
  2. proto文件各个字段详细介绍
  3. token认证
  4. 截止时间(中止请求)和请求取消
  5. AOP切面策略
  6. 重试策略(policy)
  7. 负载均衡策略(grpc本身提供的策略及nginx代理)
  8. 日志记录
  9. 健康检查
  10. 后续有更多特色功能会持续补充
http://www.dt0577.cn/news/42860.html

相关文章:

  • 东莞网站建设外贸百度客服怎么联系
  • 网站可信度必须做吗seo关键词布局
  • 小学生个人网站怎么做网络营销概念是什么
  • 做网站用哪个软件写比较好网站域名查询工具
  • 福永电子烟网站开发李勇seo博客
  • 网站 电信已备案 联通重庆森林经典台词 凤梨罐头
  • 那个网站可以做微课推广软文发稿
  • 做外贸一般用什么网站好郑州seo网络推广
  • 做网站拿来卖如何给企业做网络推广
  • 电商思维做招聘网站网页友情链接
  • 自助网站制作系统源码郑州seo关键词排名优化
  • 网站开发留言板门户网站有哪些
  • 企业网站建设兴田德润地址东莞百度seo排名
  • 公司网站做推广支出分录淘宝关键词热度查询工具
  • 餐饮网站建设最近新闻内容
  • 宁波网站制作哪家全面国内最近的新闻大事
  • 建设网站有哪些目的是什么网络营销是什么
  • 邯郸有建网站吗哪个公司好些网络运营主要做什么工作
  • 南宁网站建设方案报价百度云搜索引擎入口手机版
  • 青岛即墨城乡建设局网站上海空气中检测出病毒
  • 秦皇岛做网站的公司选汉狮免费创建个人网页
  • 西宁网站建设天锐科技广州seo关键词优化费用
  • 网站后台管理系统怎么进百度广告电话号码是多少
  • 网站设计远程培训阿里巴巴seo排名优化
  • 做网站要学编程麽专业拓客团队怎么收费
  • 深圳开发网站建设视频号链接怎么获取
  • 学校网站建设合同二维码引流推广的平台
  • 南京个人网站建设营销公司排行
  • 电子商务网站建设用什么语言山东百搜科技有限公司
  • 家装网上怎么接单啊seo专员是做什么的