作者引言

很高兴啊,我们来到了IceRPC之使用Dev Containers进行 .NET QUIC 精简开发,主要是一篇指引,如何使用开发容器做为开发环境,进行开发IceRPC,可适用于任务应用的开发

使用 Dev Containers 进行 .NET QUIC 精简开发

主要是引导大家,如何使用开发容器Development Containers,进行.Net下的QUIC的开发。

QUIC 是一种考虑到性能和安全性的现代传输协议,是远程过程调用(RPCs)的理想选择。 然而,利用 QUIC 功能开发 .NET 应用程序,可能具有挑战性,因为.NET 对跨平台 QUIC 的支持有限。例如:.NET QUIC 实现需要 Linux 上的 libmsquic 库,并且截至撰写本文时还未支持 Windows 10 或 macOS。因此,深入研究基于 QUIC 的应用程序开发的最有效方法之一是利用开发容器development containers

开发容器(简称dev container) 允许将容器作为功能齐全的开发环境。它可用于运行应用程序、分离使用代码库所需的工具、库或运行时,并帮助持续集成和测试。

https://containers.dev

这些容器能够创建便携式、一致的开发环境 - 解决 QUIC 开发.NET相关的特定平台的挑战,并确保团队中的所有开发人员都在使用相同的工具和库。

本篇将引导设置,专门用于开发 .NET 应用程序的开发容器,应用程序使用 QUIC,然后说明,如何使用此容器运行简单的 QUIC 服务器和客户端。涉及开发容器的整体概念,可以应用于任何应用!

先决条件

Docker

Docker 是一个用于构建和共享容器化应用程序的工具。 Docker 开始使用的最佳方法是在电脑机器上安装 Docker Desktop.

装 Docker Desktop 后,启动它并确保其运行。可以通过在终端中执行以下命令来验证 Docker 是否正确安装以及 Docker 守护程序是否正在运行:

docker info

Visual Studio Code

虽然可以使用任何支持 dev 容器的编辑器,但本篇将假设正在使用 Visual Studio Code(VS Code)。 因此,请确保已下载 VS Code 并安装了 Dev Containers 扩展:

1. 创建 .devcontainer 目录

既然我们已经安装并运行了 Docker,可以开始配置我们的开发环境了。创建新目录,或导航到要设置开发容器的现有项目。

导航到项目并创建一个顶级目录,可以在其中存储开发环境配置文件和代码。

mkdir .devcontainer
cd .devcontainer

2. 创建 devcontainer.json

.devcontainer 文件夹中创建 devcontainer.json 文件。该文件将定义开发环境的配置。虽然可以使用 devcontainer.json 文件来指定各种设置,但我们只会指示它使用我们将在下一步中创建的 Dockerfile ,并指定一些运行参数。可以在Dev Container specification中找到其他配置选项。

{
"name": "QUIC Development Container",
"build": {
"dockerfile": "Dockerfile"
}
}

这个 devcontainer.json 做了什么?

  • 名称 name 属性指定开发容器的名称。当开发容器处于活动状态时,该名称会显示在 VS 代码状态栏中。
  • 构建 build 属性指定将用于构建开发容器的 Dockerfile 路径。在这种情况下,Dockerfiledevcontainer.json 文件位于同一目录中,并命名为Dockerfile

3. 创建 Dockerfile

下一步, 在 .devcontainer 目录下创建 Dockerfile 文件。 该文件包含构建 Docker 映像的说明,这是开发容器的基础。

FROM mcr.microsoft.com/devcontainers/dotnet:8.0-jammy

# Install libmsquic
RUN wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb \
&& dpkg -i packages-microsoft-prod.deb \
&& rm packages-microsoft-prod.deb \
&& apt-get update \
&& apt install libmsquic -y

这个 Dockerfile 做了什么?

  • mcr.microsoft.com/devcontainers/dotnet:8.0-jammy 指定开发容器的基本映像。这是一个包含 .NET SDK 和运行时,以及所需的其他工具和库 .NET 开发的 Linux 映像。
  • libmsquic Linux 平台上的 .NET QUIC 库。可以在QUIC in .NET中了解有关 QUIC 的更多信息.

4. QUIC 和 证书

由于 QUIC 是一种安全的运输工具,因此需要提供证书。为了简单起见,在本篇中,我们将在下一节中使用 IceRPC 新建项目模板提供的证书。请注意,这些证书不适合生产使用,在部署应用程序时应替换为自己的证书

5. 使用 Dev Container

为了使用 QUIC 开发容器, 我们使用 icerpc-slice-* .NET 模板,来生成一个通过 QUIC 进行通信的服务端和一个客户端。还为我们处理 SSL 证书,是快速验证开发容器的绝佳起点。

dotnet new install IceRPC.Templates
dotnet new icerpc-slice-client -o ExampleClient --transport quic
dotnet new icerpc-slice-server -o ExampleServer --transport quic

现在我们已经创建了服务器和客户端,可以在 VS Code 中打开我们的项目,并使用 Ctrl+Shift+PCmd+Shift+P 启动命令板,然后搜索 Dev Container:在 Container 中打开文件夹Open Folder in Container并选择根级项目目录。

这将打开一个新的 VS Code 窗口,等待容器下载及更新Dockerfile构建 ,项目将加载到开发容器中!

现在我们的项目在开发容器中打开了,可以启动服务器和客户端。通过在 VS Code 集成终端中,运行服务器和客户端,来完成此操作,该终端现在将使用开发容器。

IceRPC 客户端和服务器, 运行非常简单:

cd ExampleServer
dotnet run # In a new terminal tab
cd ExampleClient
dotnet run

结论

现在应该可以看到客户端和服务器通过 QUIC 进行通信!好吧,我们可以在开发容器内开始开发 QUIC 应用程序!开发容器提供了,跨不同机器的一致开发环境,并确保所有开发人员使用相同的工具和库来吧,浪起来!

.Net 8.0 下的新RPC,IceRPC之使用Dev Containers进行 .NET QUIC 精简开发的更多相关文章

  1. Ubuntu18.04和OpenWrt 18.06.0 下使用aria2和BaiduExport处理百度盘下载

    Ubuntu下没有可用的百度盘客户端, 下载大文件如果通过浏览器就会特别不可靠. 可以使用Chrome插件 BaiduExport 得到下载链接和参数后, 通过aria2进行下载. Aria2安装 直 ...

  2. Ubuntu14.0下安装Zend Framework 2

    Ubuntu14.0下安装Zend Framework 2为了安装这个东西,忙活了快一天了,参考中文博客一直没有安装成功,有些博客的时间也是已经很早了,后来google看英文版的才安装成功,这里记录一 ...

  3. 有史来最大改变 Android 5.0十大新特性

    有史来最大改变 Android 5.0十大新特性 2014.10.16 14:51:31 来源:腾讯数码作者:腾讯数码 ( 0 条评论 )   距离Android系统上一次重大更新不到一年的时间,谷歌 ...

  4. Android下添加新的自定义键值和按键处理流程

            Android下添加新的自定义键值和按键处理流程     说出来不怕大家笑话,我写这篇博客的原因在于前几天去一个小公司面试Android系统工程师,然后在面试的时候对方的技术总监问了我 ...

  5. .NET Framework4.0 下的多线程

    一.简介 在4.0之前,多线程只能用Thread或者ThreadPool,而4.0下提供了功能强大的Task处理方式,这样免去了程序员自己维护线程池,而且可以申请取消线程等...所以本文主要描述Tas ...

  6. NodeJS - Express 3.0下ejs模板使用 partial展现 片段视图

    如果你也在看Node.js开发指南,如果你也在一步一步实现 microBlog 项目!也许你会遇到本文提到的问题,如果你用的是Express 3.0 本书实例背景是 Express 2.0 而如今升级 ...

  7. 【CNMP系列】CentOS7.0下安装PHP5.6.30服务

    上一节我们讲过了如何在CentOS7.0下安装MySql服务,如果没有看到欢迎页面的朋友,可以加我的个人微信详聊:litao514148204 附上一节地址:http://www.cnblogs.co ...

  8. 【CNMP系列】CentOS7.0下安装Nginx服务

    话步前言,CNMP之路,系统起步:http://www.cnblogs.com/riverdubu/p/6425028.html 这回我来讲解下CentOS7.0下如何安装和配置Nginx服务 Ngi ...

  9. 【Linux】CentOS7.0下安装JDK环境

    写在前面:此次试验是在CentOS7上面安装的,亲测成功. 所需工具:JDK1.8安装包,xftp 具体步骤: 1,首先使用xftp连接到自己的虚拟机,然后查看是否有"/usr/java/j ...

  10. Spring Boot 2.0正式发布,新特性解读

    作者|翟永超 Spring Boot 2.0 来啦,有哪些新特性?升级吗? 写在前面 北京时间 3 月 1 日,经过漫长的等待之后,Spring Boot 2.0 正式发布.作为 Spring 生态中 ...

随机推荐

  1. Windows上部署spring boot jar项目

    1.下载地址:https://github.com/winsw/winsw/releases 下载红色框内三个文件就够了. sample-allOptions.xml 所有配置参考 sample-mi ...

  2. KingbaseES V8R6 表空间加密

    透明存储加密优势 透明存储加密可确保加密敏感数据满足合规性要求,并提供简化加密操作的功能,优势如下: 作为安全管理员,您可以确保敏感数据已加密,因此在存储介质或数据文件被盗或入侵者试图从操作系统访问数 ...

  3. 使用FlashFXP,密钥方式连接Amazon的CE2实例

    操作步骤如下: 1.选择"站点" -> "密钥管理器" 2.选择"导入" 3.名称随意填, 类型选择"用于SFTP的RSA/ ...

  4. #Tarjan,贪心#LOJ 3684 「COCI 2022.3」Usmjeravanje

    题目传送门 分析 可以发现题目实际上求的是最小强连通分量个数. 并且每个强连通分量必然是由最多两段区间 \(a_l\sim a_r,b_L\sim b_R\) 组成的 只要存在一条路 \(b_R-&g ...

  5. #博弈论#Poj 1740 A New Stone Game

    题目 两个人轮流操作,每次选择一个非空石堆后, 选择扔掉至少一个石子后可将剩余石子任意移动至其余非空石堆, 也可以不移,无石子可取者为败,问先手是否必胜 分析 感性理解一下,如果有两堆个数相同的石子, ...

  6. Java处理关键字进行脱敏操作

    1.通过表头获取需要处理的下标列 注:此处导出表格时对关键字进行脱敏处理 /** * . * 对表头进行过滤判断 * * @param headers 表头 * @return 对应的下标列及方法名 ...

  7. Qt 实现涂鸦板一:简易涂鸦板

    新建一个Qt项目,在 .h 文件中写入 #pragma once #include <QtWidgets/QWidget> #include "ui_xuexi.h" ...

  8. django项目部署到centos

    服务器是使用的阿里云的centos 7.6 项目使用的是 Python3.9.5 + Django 3.2.4 目标:将django项目部署到centos上,centos + Python + dja ...

  9. easyExcel合并数据导出(一对多)

    语言 java 框架 ssm 需求 :看图  也是导出效果 数据库查询为(关系为一对多) 一个学生对应多个课程 实现步骤 1.实体类配置, 建议单独写个实体用来导出使用() 学生信息字段正常配置  , ...

  10. vue watch的this 到底是什么?

    正文 watch: { value: (newV, oldV) => { this.a = newV; } } 加入该vue对象中,data 有: { data:{ a:5 } } 那么请问,如 ...