首页 > 其他分享 >.Net 8.0 下的新RPC,IceRPC之使用Dev Containers进行 .NET QUIC 精简开发

.Net 8.0 下的新RPC,IceRPC之使用Dev Containers进行 .NET QUIC 精简开发

时间:2024-05-03 10:56:09浏览次数:25  
标签:8.0 容器 IceRPC Dev 开发 QUIC NET Dockerfile devcontainer

作者引言

很高兴啊,我们来到了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构建 ,项目将加载到开发容器中!

Command Palette in VS Code

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

VS Code window with active dev container

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

cd ExampleServer
dotnet run

# In a new terminal tab
cd ExampleClient
dotnet run

结论

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

标签:8.0,容器,IceRPC,Dev,开发,QUIC,NET,Dockerfile,devcontainer
From: https://www.cnblogs.com/xlgwr/p/18171004

相关文章

  • .Net 8.0 下的新RPC,IceRPC之"请求"生命线意义非凡
    作者引言很高兴啊,我们来到了IceRPC之"请求"生命线意义非凡,号称“死亡时间”的追命线,颤抖吧!"请求"生命线之意义非凡本文将深入探讨将截止时间纳入RPCs的重要性,以开发更强大的分布式应用程序。概述RPC(远程过程调用)系统中发送请求,通常会带来不确定性:无法保证,何时会收到回......
  • bc-dev-hplg-merge-0
    Hyperkedge区块链开发教程(全)原文:zh.annas-archive.org/md5/7f932e9670331dae388d1a76f72881d8译者:飞龙协议:CCBY-NC-SA4.0前言这个学习路径是你探索和构建使用以太坊、HyperledgerFabric和HyperledgerComposer的区块链网络的简易参考。它从区块链的概述开始,向您展示......
  • adv-bc-dev-merge-0
    区块链高级开发教程(全)原文:zh.annas-archive.org/md5/64e2728fdd6fa177d97883a45d7dec42译者:飞龙协议:CCBY-NC-SA4.0前言区块链技术是一种分布式分类账,应用于金融、政府和媒体等行业。本学习路径是您构建使用以太坊、JavaScript和Solidity构建区块链网络的指南。您将首......
  • .Net 8.0 下的新RPC,IceRPC之试试的新玩法"打洞"
    作者引言很高兴啊,我们来到了IceRPC之试试的新玩法"打洞",让防火墙哭去吧试试RPCs的新玩法"打洞"比较典型的玩法:RPC数据流从客户端流向服务端,现在来尝试用IceRPC来玩一个新的花样"打洞"。概述对于IceRPC,客户端是发起连接的实体,而服务器是接受连接的实体。建立连接后,......
  • Audio Output Devices API
    AudioOutputDevicesAPI:音频输出设备API允许Web应用程序提示用户应使用什么输出设备进行音频播放。<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"/><metaname="viewport"content="width=device-width,i......
  • 使用浏览器无密码登录Azure DevOps Server
    1.概述AzureDevOpsServer作为软件开发管理平台服务器,除了支持主流的IDE开发工具外,普通用户使用最频繁的客户端工具是网页浏览器。由于AzureDevOpsServer集成AD域服务器实现用户认证,用户每次使用浏览器登录服务器时都需要输入用户的域账户和密码。但是,对于已经使用域账户登录......
  • 全景剖析阿里云容器网络数据链路(七):Terway DataPath V2(Terway≥1.8.0)
    作者:余凯前言近几年,企业基础设施云原生化的趋势越来越强烈,从最开始的IaaS化到现在的微服务化,客户的颗粒度精细化和可观测性的需求更加强烈。容器网络为了满足客户更高性能和更高的密度,也一直在高速的发展和演进中,这必然对客户对云原生网络的可观测性带来了极高的门槛和挑战。为......
  • Devexpress GridView 单元格输入检验
    实现效果打开设计器找到CellValueChanged事件编写代码privatevoidgvmain_CellValueChanged(objectsender,DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgse){stringseq=gvmain.GetRowCellValue(e.RowHandle,colQaSeq).......
  • Offline web technology for Mobile devices
    一、当前问题1、弱网或断网,当用户进入电梯或无网区,长时间白屏或无法显示页面2、正常网络,从点击app到显示首页文字图片,白屏时间大约7-9秒 二、原因分析1、从技术视角,分析一下网页启动的几个关键耗时阶段 2、没有做离线化技术,而手机端用户进入弱网与无网区......
  • 界面组件DevExpress Blazor UI v23.2 - 网格、工具栏功能全新升级
    DevExpress BlazorUI组件使用了C#为BlazorServer和BlazorWebAssembly创建高影响力的用户体验,这个UI自建库提供了一套全面的原生BlazorUI组件(包括PivotGrid、调度程序、图表、数据编辑器和报表等)。DevExpress Blazor控件目前已经升级到v23.2版本了,此版本进一步增强了可访问......