主流网站开发高端企业网站模板

diannao/2026/1/26 1:55:41/文章来源:
主流网站开发,高端企业网站模板,WordPress 公海池,游戏下载网站 wordpress前言随着今年6月份的 HTTP/3 协议的正式发布#xff0c;它背后的网络传输协议 QUIC#xff0c;凭借其高效的传输效率和多路并发的能力#xff0c;也大概率会取代我们熟悉的使用了几十年的 TCP#xff0c;成为互联网的下一代标准传输协议。在去年 .NET 6 发布的时候#xf…前言随着今年6月份的 HTTP/3 协议的正式发布它背后的网络传输协议 QUIC凭借其高效的传输效率和多路并发的能力也大概率会取代我们熟悉的使用了几十年的 TCP成为互联网的下一代标准传输协议。在去年 .NET 6 发布的时候已经可以看到 HTTP/3 和 Quic 支持的相关内容了但是当时 HTTP/3 的 RFC 还没有定稿所以也只是预览功能而 Quic 的 API 也没有在 .NET 6 中公开。在最新的 .NET 7 中.NET 团队公开了 Quic API它是基于 MSQuic 库来实现的 提供了开箱即用的支持命名空间为 System.Net.Quic。Quic API下面的内容中我会介绍如何在 .NET 中使用 Quic。下面是 System.Net.Quic 命名空间下比较重要的几个类。QuicConnection表示一个 QUIC 连接本身不发送也不接收数据它可以打开或者接收多个QUIC 流。QuicListener用来监听入站的 Quic 连接一个 QuicListener 可以接收多个 Quic 连接。QuicStream表示 Quic 流它可以是单向的 QuicStreamType.Unidirectional只允许创建方写入数据也可以是双向的QuicStreamType.Bidirectional它允许两边都可以写入数据。小试牛刀下面是一个客户端和服务端应用使用 Quic 通信的示例。1. 分别创建了 QuicClient 和 QuicServer 两个控制台程序。项目的版本为 .NET 7 并且设置 EnablePreviewFeatures true。下面创建了一个 QuicListener监听了本地端口 9999指定了 ALPN 协议版本。Console.WriteLine(Quic Server Running...);// 创建 QuicListener var listener  await QuicListener.ListenAsync(new QuicListenerOptions { ApplicationProtocols  new ListSslApplicationProtocol { SslApplicationProtocol.Http3  },ListenEndPoint  new IPEndPoint(IPAddress.Loopback,9999), ConnectionOptionsCallback  (connection,ssl, token)  ValueTask.FromResult(new QuicServerConnectionOptions(){DefaultStreamErrorCode  0,DefaultCloseErrorCode  0,ServerAuthenticationOptions  new SslServerAuthenticationOptions(){ApplicationProtocols  new ListSslApplicationProtocol() { SslApplicationProtocol.Http3 },ServerCertificate  GenerateManualCertificate()}})  });因为 Quic 需要 TLS 加密所以要指定一个证书GenerateManualCertificate 方法可以方便地创建一个本地的测试证书。X509Certificate2 GenerateManualCertificate() {X509Certificate2 cert  null;var store  new X509Store(KestrelWebTransportCertificates, StoreLocation.CurrentUser);store.Open(OpenFlags.ReadWrite);if (store.Certificates.Count  0){cert  store.Certificates[^1];// rotate key after it expiresif (DateTime.Parse(cert.GetExpirationDateString(), null)  DateTimeOffset.UtcNow){cert  null;}}if (cert  null){// generate a new certvar now  DateTimeOffset.UtcNow;SubjectAlternativeNameBuilder sanBuilder  new();sanBuilder.AddDnsName(localhost);using var ec  ECDsa.Create(ECCurve.NamedCurves.nistP256);CertificateRequest req  new(CNlocalhost, ec, HashAlgorithmName.SHA256);// Adds purposereq.CertificateExtensions.Add(new X509EnhancedKeyUsageExtension(new OidCollection{new(1.3.6.1.5.5.7.3.1) // serverAuth}, false));// Adds usagereq.CertificateExtensions.Add(new X509KeyUsageExtension(X509KeyUsageFlags.DigitalSignature, false));// Adds subject alternate namesreq.CertificateExtensions.Add(sanBuilder.Build());// Signusing var crt  req.CreateSelfSigned(now, now.AddDays(14)); // 14 days is the max duration of a certificate for thiscert  new(crt.Export(X509ContentType.Pfx));// Savestore.Add(cert);}store.Close();var hash  SHA256.HashData(cert.RawData);var certStr  Convert.ToBase64String(hash);//Console.WriteLine($\n\n\n\n\nCertificate: {certStr}\n\n\n\n); // -- you will need to put this output into the JS API call to allow the connectionreturn cert; }阻塞线程直到接收到一个 Quic 连接一个 QuicListener 可以接收多个 连接。var connection  await listener.AcceptConnectionAsync();Console.WriteLine($Client [{connection.RemoteEndPoint}]: connected);接收一个入站的 Quic 流, 一个 QuicConnection 可以支持多个流。var stream  await connection.AcceptInboundStreamAsync();Console.WriteLine($Stream [{stream.Id}]: created);接下来使用 System.IO.Pipeline 处理流数据读取行数据并回复一个 ack 消息。Console.WriteLine();await ProcessLinesAsync(stream);Console.ReadKey();      // 处理流数据 async Task ProcessLinesAsync(QuicStream stream) {var reader  PipeReader.Create(stream);  var writer  PipeWriter.Create(stream);while (true){ReadResult result  await reader.ReadAsync();ReadOnlySequencebyte buffer  result.Buffer;while (TryReadLine(ref buffer, out ReadOnlySequencebyte line)){// 读取行数据ProcessLine(line);// 写入 ACK 消息await writer.WriteAsync(Encoding.UTF8.GetBytes($Ack: {DateTime.Now.ToString(HH:mm:ss)} \n));} reader.AdvanceTo(buffer.Start, buffer.End);if (result.IsCompleted){break;} }Console.WriteLine($Stream [{stream.Id}]: completed);await reader.CompleteAsync();  await writer.CompleteAsync();     } bool TryReadLine(ref ReadOnlySequencebyte buffer, out ReadOnlySequencebyte line) { SequencePosition? position  buffer.PositionOf((byte)\n);if (position  null){line  default;return false;} line  buffer.Slice(0, position.Value);buffer  buffer.Slice(buffer.GetPosition(1, position.Value));return true; } void ProcessLine(in ReadOnlySequencebyte buffer) {foreach (var segment in buffer){Console.WriteLine(Recevied -   System.Text.Encoding.UTF8.GetString(segment.Span));}Console.WriteLine(); }以上就是服务端的完整代码了。接下来我们看一下客户端 QuicClient 的代码。直接使用 QuicConnection.ConnectAsync 连接到服务端。Console.WriteLine(Quic Client Running...);await Task.Delay(3000);// 连接到服务端 var connection  await QuicConnection.ConnectAsync(new QuicClientConnectionOptions {DefaultCloseErrorCode  0,DefaultStreamErrorCode  0,RemoteEndPoint  new IPEndPoint(IPAddress.Loopback, 9999),ClientAuthenticationOptions  new SslClientAuthenticationOptions{ApplicationProtocols  new ListSslApplicationProtocol { SslApplicationProtocol.Http3 },RemoteCertificateValidationCallback  (sender, certificate, chain, errors) {return true;}} });创建一个出站的双向流。// 打开一个出站的双向流 var stream  await connection.OpenOutboundStreamAsync(QuicStreamType.Bidirectional); var reader  PipeReader.Create(stream); var writer  PipeWriter.Create(stream);后台读取流数据然后循环写入数据。// 后台读取流数据 _  ProcessLinesAsync(stream);Console.WriteLine(); // 写入数据 for (int i  0; i  7; i) {await Task.Delay(2000);var message  $Hello Quic {i} \n;Console.Write(Send -   message);  await writer.WriteAsync(Encoding.UTF8.GetBytes(message));  }await writer.CompleteAsync(); Console.ReadKey();ProcessLinesAsync 和服务端一样使用 System.IO.Pipeline 读取流数据。async Task ProcessLinesAsync(QuicStream stream) {while (true){ReadResult result  await reader.ReadAsync();ReadOnlySequencebyte buffer  result.Buffer;while (TryReadLine(ref buffer, out ReadOnlySequencebyte line)){ // 处理行数据ProcessLine(line);}reader.AdvanceTo(buffer.Start, buffer.End); if (result.IsCompleted){break;}}await reader.CompleteAsync();await writer.CompleteAsync();} bool TryReadLine(ref ReadOnlySequencebyte buffer, out ReadOnlySequencebyte line) { SequencePosition? position  buffer.PositionOf((byte)\n);if (position  null){line  default;return false;}line  buffer.Slice(0, position.Value);buffer  buffer.Slice(buffer.GetPosition(1, position.Value));return true; }void ProcessLine(in ReadOnlySequencebyte buffer) {foreach (var segment in buffer){Console.Write(Recevied -   System.Text.Encoding.UTF8.GetString(segment.Span));Console.WriteLine();}Console.WriteLine(); }到这里客户端和服务端的代码都完成了客户端使用 Quic 流发送了一些消息给服务端服务端收到消息后在控制台输出并回复一个 Ack 消息因为我们创建了一个双向流。程序的运行结果如下我们上面说到了一个 QuicConnection 可以创建多个流并行传输数据。改造一下服务端的代码支持接收多个 Quic 流。var cts  new CancellationTokenSource();while (!cts.IsCancellationRequested) {var stream  await connection.AcceptInboundStreamAsync();Console.WriteLine($Stream [{stream.Id}]: created);Console.WriteLine();_  ProcessLinesAsync(stream);  } Console.ReadKey();对于客户端我们用多个线程创建多个 Quic 流并同时发送消息。默认情况下一个 Quic 连接的流的限制是 100当然你可以设置 QuicConnectionOptions 的 MaxInboundBidirectionalStreams 和 MaxInboundUnidirectionalStreams 参数。for (int j  0; j  5; j) {_  Task.Run(async ()  {// 创建一个出站的双向流var stream  await connection.OpenOutboundStreamAsync(QuicStreamType.Bidirectional); var writer  PipeWriter.Create(stream); Console.WriteLine();await Task.Delay(2000);var message  $Hello Quic [{stream.Id}] \n;Console.Write(Send -   message);await writer.WriteAsync(Encoding.UTF8.GetBytes(message));await writer.CompleteAsync(); });   }最终程序的输出如下完整的代码可以在下面的 github 地址找到希望对您有用https://github.com/SpringLeee/PlayQuic

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/88122.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站界面设计如何实现功能美与形式美的统一佛山做外贸网站咨询

jsp里面编写java代码注意加双引号 if("<%type%>""open"){document.getElementById("e").focus();}

为什么做pc网站06627网页制作和网站建设试卷

含位域结构体的sizeof: 前面已经说过&#xff0c;位域成员不能单独被取sizeof值&#xff0c;我们这里要讨论的是含有位域的结构体的sizeof&#xff0c;只是考虑到其特殊性而将其专门列了出来。 C99规定int、unsigned int和bool可以作为位域类型&#xff0c;但编译器几乎都对此作…

梅县区住房和城乡规划建设局官方网站做企业网站需要什么条件

全世界只有3.14 % 的人关注了爆炸吧知识10月18日&#xff0c;有网友爆料称“上海野生动物园猛兽区一饲养员遭群熊撕扯”。随后&#xff0c;上海野生动物园证实&#xff0c;该饲养员目前已身亡。据悉&#xff0c;他才27岁&#xff0c;还没成家。从网上发布的现场视频来看&#x…

网站设计服务开发小程序商城多少钱

文章目录 VMWare 介绍Android 系统介绍概述最终效果前置步骤开始安装 VMWare 介绍 VMware Workstation是VMware公司开发的一款桌面虚拟化软件。它允许用户在一台物理计算机上同时运行多个操作系统&#xff0c;每个操作系统都在自己的虚拟机中运行。这使得用户可以在同一台计算…

电商设计就是网站设计吗wordpress 表格程序

效果 需求 我们这个页面顶部有tabs 栏 而且可以滑动到底部 进行分页 实现这样的页面我们应该怎么做 你应该会想到scroll-view 这个组件吧 下面我们来详情介绍一下这个页面的实现和功能开发 首先展示一下代码 item 循环项 <template><div class"wechat-or…

企业网站建设ejiew天猫交易购买平台

HTTP协议 HTTP协议&#xff08;HyperText Transfer Protocol&#xff09;即超文本传输协议 &#xff0c;是TCP/IC网络体系结构应用层的一个客户端-服务端协议&#xff0c;是所有客户端&#xff0c;服务端数据传输的基石&#xff08;数据传输规则&#xff09; 特点 ⭐基于TCP协…

假发网站是怎么做的wordpress慢6

介绍 Elasticsearch Curator通过以下方式帮助您策划或管理您的Elasticsearch索引和快照&#xff1a; 从集群中获取索引&#xff08;或快照&#xff09;的完整列表&#xff0c;作为可操作列表迭代用户定义的过滤器列表&#xff0c;根据需要逐步从此可操作列表中删除索引&#…

如何免费做网站网页遵义做网站优化

原文:使用.netFx4.0提供的方法解决32位程序访问64位系统的64位注册表我们知道目标平台是32位的程序运行在64位的系统上&#xff0c;去访问部分注册表的时候系统自动重定向到win32node节点对应的项去了。但是做过安装程序开发人员可能遇到过“需要去掉重定向”的问题&#xff0c…

做斗图的网站伪造wordpress浏览量

2019独角兽企业重金招聘Python工程师标准>>> 做Android应用的人都知道&#xff0c;要一个apk适用多个不同的手机屏幕是很容易的&#xff0c;就是在项目的res文件夹下面有多套相关的资源文件。程序运行的 时候&#xff0c;Android系统会根据当前设备的信息去加载不同…

自学网站平面设计ui设计和网站开发

转载自&#xff08;http://www.cnblogs.com/M-LittleBird/p/5902850.html&#xff09; 一、下载windows版本的Redis 官网以及没有下载地址&#xff0c;只能在github上下载&#xff0c;官网只提供linux版本的下载 官网下载地址&#xff1a;http://redis.io/download github下载地…

中文网站模板大全wordpress支持系统

解决多级路径刷新页面样式丢失的问题 1.public/index.html 中 引入样式时不写 ./ 写 / &#xff08;常用&#xff09;2.public/index.html 中 引入样式时不写 ./ 写 %PUBLIC_URL% &#xff08;常用&#xff09;3.使用HashRouter

兰州企业网站建设多少钱电工培训学校

来自&#xff1a;金钟路上小码工链接&#xff1a;https://www.cnblogs.com/danbing/p/7459224.html一、什么是负载均衡&#xff1f;互联网早期&#xff0c;业务流量比较小并且业务逻辑比较简单&#xff0c;单台服务器便可以满足基本的需求&#xff1b;但随着互联网的发展&#…

网站顶端图片素材宁波网站推广外包服务

1. 对于带宽为50k Hz的信道&#xff0c;若有4种不同的物理状态来表示数据&#xff0c;信噪比为20dB 。&#xff08;1&#xff09; 按奈奎斯特定理&#xff0c;信道的最大传输数据速率是多少&#xff1f;&#xff08;2&#xff09; 按香农定理&#xff0c;信道的最大传输数据速度…

中文网站开发语言公司简历模板

2017年9月发布时&#xff0c;小米米A1几乎成功一夜成名。小西米去年夏天推出了Mi A2和Mi A2 Lite。现在&#xff0c;正如XDA开发者所揭示的那样&#xff0c;中国品牌正在筹备第三代产品阵容。代号为“bamboo_sprout”和“cosmos_sprout” - 所有Android One智能手机都包含代号为…

如何在网站上做社交的链接火狐浏览器下载手机版

前言在C#中DataTable导出数据的时候&#xff0c;我们需要HTML格式的输出数据, 这时候就需要使用将DataTable导出为到HTML格式的方法了&#xff0c;以下代码就可以帮助我们达到目的。首先,我们要绑定DataTable和 DataGridView。一、通过DataTable绑定DataGridView1. 创建DataTab…

金融 网站 模板什么叫整合营销

二叉树 1. 二叉树1.1 二叉树的介绍1.2 两种特殊的二叉树1.3 二叉树的性质1.4 二叉树的存储 2. 二叉树的基本操作2.1 二叉树的创建2.2 二叉树的优先遍历2.3 递归实现二叉树遍历2.4 用非递归实现二叉树遍历 1. 二叉树 1.1 二叉树的介绍 二叉树是一种数据结构&#xff0c;一颗二…

python完整网站开发项目视频教程表3-5企业网站建设可行性分析

DOM4J是 dom4j.org 出品的一个开源 XML 解析包。DOM4J应用于 Java 平台&#xff0c;采用了 Java 集合框架并完全支持 DOM&#xff0c;SAX 和 JAXP。 DOM4J 使用起来非常简单。只要你了解基本的 XML-DOM 模型&#xff0c;就能使用。 Dom&#xff1a;把整个文档作为一个对象。 DO…

上海比较大的优化公司石家庄网站优化招聘

##江科大51单片机学习 什么是单片机&#xff1f;&#xff1f;&#xff1f; 单片机&#xff0c;英文名&#xff0c;Micro Controller Unit&#xff0c;简称MCU&#xff08;tips&#xff1a;有人会简称它为CPU&#xff0c;但不是如此&#xff0c;CPU其实被集成在MCU中&#xff…

广西专业网站建设玉树北京网站建设

分布式系统的5个优点 资源共享开放性并发性可伸缩性容错性 分布式计算中必须考虑的设计问题 透明性&#xff1a;隐藏底层分布 开放性 可伸缩性 三个维度 规模&#xff1a;又分为增强扩展(单挑)&#xff0c;增加扩展(群殴)分布可靠性 信息安全性 主要防止以下类型的攻击 拦…

找工作哪个网站好智联招聘郑州网站建设优点

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 可视化工具操作1 tabixhttp://ui.tabix.io/ 2 DBeaverhttps://dbeaver.io/download/ 可视化工具操作 1 tabix tabix 支持通过浏览器直接连接 ClickHouse&#xff…