网站程序怎么做-如何将自己的网页发布到网站上以便其他人可以看到

自从大学学了H5,我就一直在想,如何把自己写的HTML页面发布到网上,让任何用户都可以像百度一样访问? 于是我做了一些尝试,得到了以下结果:

首先,将网站上传到网站供他人访问需要做以下几件事:

1:域名

2:空间

什么是域名? 域名可以理解为一个地址网站程序怎么做,如baidu.com、sina.cn等简称域名,域名分为一级、二级、三级、四级域名,比如:baidu.com,这是一个域名,com这些都是二级域名,也就是五级域名,按多少个点分为几级域名。

什么是空间? 简单来说,就是存放网站内容的地方。 这三者缺一不可。 如果只有域名baidu.com没有空间,那么你访问baidu.com就什么都没有,而如果只有空间没有域名,你就很难访问。

通常购买域名和空间后,都会进行解析和绑定。 解决方法是将域名指向空间的IP地址(购买空间后你就会有一个IP地址),并且需要绑定空间。

其次,申请域名可以到腾讯云进行操作; 申请成功后记得进行域名解析。 购买空间可以在凡客网进行操作。

然后,域名绑定空间:

绑定域名和空间,首先将域名解析到服务器,并绑定服务器的IP地址。

方法一:注册空间时绑定域名网站程序怎么做,注册空间时提示域名,输入要绑定的域名,勾选“我已阅读并接受虚拟主机租赁合同”前面的框,然后单击“确定”,确认申请激活空间。

方法二:除了注册空间时绑定域名的方法外,还有在空间面板中绑定域名的方法——打开空间管理的控制面板,找到域名绑定项,点击打开(注意无论你购买哪个空间,管理面板都是通过域名绑定此功能的)。 添加域名后在输入框中输入域名地址,然后点击添加绑定确认绑定操作。

然后绑定之后我们就开始把自己的东西上传到空间中,然后就可以通过域名访问了:

我们需要下载一个软件,Google FTP,会有很多FTP软件,至于哪个是FTP,我们可以把它理解为一个传输合约,一个将本地文件传输到空间的工具,这里我们使用8UFTP作为列表,我们打开软件,详细见右图:

登录成功后,我们可以看到左侧有白框的部分。 该部分是存放网站内容的目录。 默认为根目录。 一般会有两个目录,一个存放网站内容,一个存放数据库。 之后我们就可以传入我们自己的网页了。 在左侧目录中选择要上传的文件,右键选择上传! ! !

参考链接:服务器应用-云服务器Ubuntu或CentOs搭建JavaWeb环境

eBPF(扩展伯克利数据包过滤器)是一个高性能内核虚拟机,可以运行在内核空间中收集系统和网络信息。 随着计算机技术的不断发展,eBPF的功能日益强大,已经成为各种高效的在线诊断和跟踪系统以及建立安全网络和服务网格的重要组成部分。

WebAssembly(Wasm)最初是为了浏览器安全沙箱而开发的。 到目前为止,WebAssembly 已经成为云原生软件组件的高性能、跨平台、多语言的软件沙箱环境。 Wasm 是一个轻量级的容器,也非常适合作为下一代无服务器平台的运行时,或者用于边缘计算等资源受限场景的高效执行。

现在,有了 Wasm-bpf 编译工具链和运行时,我们可以使用 Wasm 将 eBPF 程序编译为跨平台模块,用 C/C++ 和 Rust 编写程序。 通过在WebAssembly中使用eBPF程序,除了让Wasm应用程序获得eBPF的高性能和访问系统套接字之外,我们还可以让eBPF程序享受Wasm的沙箱、灵活性、跨平台和动态加载能力,并使用Wasm的OCI方便快捷地分发和管理eBPF程序。 例如,像 docker 一样,您可以通过单个命令从云端获取 Wasm 轻量级容器映像并运行任何 eBPF 程序。 通过结合这两项技术,我们将为 eBPF 和 Wasm 生态带来全新的开发体验!

使用 Wasm-bpf 工具链在 Wasm 中编译、动态加载、分发和运行 eBPF 程序

在前面两篇短文中,我们已经介绍了Wasm-bpf的设计思想以及如何在Wasm中使用C/C++编译eBPF程序:

基于Wasm,我们可以构建多种语言的eBPF应用程序,并以统一、轻量的方式管理和发布。 以我们创建的示例应用 bootstrap.wasm 为例,使用 C/C++ 构建的镜像最小大小仅为~90K网站用什么程序写,很容易通过网络分发,并且可以在不到 100ms 的时间内动态部署到另一台机器上、加载和运行,并保留轻量级容器的隔离特性。 运行时不需要内核特定版本头文件、LLVM、clang等依赖项,也不需要做任何消耗资源的重量级编译工作。 对于Rust来说,编译出来的产物会稍大一些,大约2M。

本文将以Rust语言为例来讨论:

我们在仓库中提供了多个示例程序,对应可观察、网络、安全等场景。

编写 eBPF 程序并编译为 Wasm 的一般流程

一般来说,在非 Wasm 沙箱用户空间中,使用 libbpf-bootstrap 脚手架,可以快速轻松地用 C/C++ 构建 BPF 应用程序。 编译、构建和运行 eBPF 程序(无论何种语言)通常涉及以下步骤:

用 Rust 编写 eBPF 程序并编译为 Wasm

Rust 可能是 WebAssembly 生态系统中支持最好的语言。 Rust 不仅支持多个 WebAssembly 编译目标,而且 wasmtime、Spin、Wagi 和许多其他 WebAssembly 工具都是用 Rust 编写的。 因此,我们还提供了Rust中的开发示例:

我们还提供了 Rust eBPF SDK,可以使用 Rust 编写 eBPF userland 程序并将其编译为 Wasm。 在aya-rs提供的相关工具链的支持下,内核模式eBPF程序也可以用Rust编译,但这里,我们复用了之前用C语言编译的内核模式程序。

首先,我们需要使用rust提供的wasi工具链创建一个新项目:

rustup target add wasm32-wasi
cargo new rust-helloworld

之后就可以使用Makefile运行make来完成整个编译过程,并生成bootstrap.bpf.o eBPF字节码文件。

使用wit-bindgen生成内核模式和Wasm模块之间通信的类型信息

wit-bindgen 项目是一组专注于 WebAssembly 并使用组件模型的语言的绑定生成器。 绑定在 *.wit 文件中描述,该文件描述 Wasm 模块导出、导出函数和套接字。 我们可以通过wit-bindgen它来生成多种语言的类型定义,以便在内核态的eBPF和用户态的Wasm模块之间传递数据。

我们首先需要将 wasm-bpf-binding 和 wit-bindgen-guest-rust 依赖项添加到 Cargo.toml 配置文件中:

wasm-bpf-binding = { path = "wasm-bpf-binding" }

该包为运行时提供的函数提供 wasm-bpf 绑定到 Wasm 模块,以加载和控制 eBPF 程序。

[dependencies]
wit-bindgen-guest-rust = { git = "https://github.com/bytecodealliance/wit-bindgen", version = "0.3.0" }

[patch.crates-io]
wit-component = {git = "https://github.com/bytecodealliance/wasm-tools", version = "0.5.0", rev = "9640d187a73a516c42b532cf2a10ba5403df5946"}
wit-parser = {git = "https://github.com/bytecodealliance/wasm-tools", version = "0.5.0", rev = "9640d187a73a516c42b532cf2a10ba5403df5946"}

该包支持使用 wit 文件为 Rust 客户端生成绑定。 有了这个包,我们不再需要自动运行 wit-bindgen。

接下来,我们使用btf2wit工具从BTF信息生成wit文件。 您可以使用cargo install btf2wit来安装我们提供的btf2wit工具,并编译生成wit信息:

cd btf
clang -target bpf -g event-def.c -c -o event.def.o
btf2wit event.def.o -o event-def.wit
cp *.wit ../wit/

对于C结构体生成的机智信息,大致如下:

c写一个从1加到100的程序_网站用什么程序写_qt写一个简单的定时关机程序

default world host {
record event {
pid: s32,
ppid: s32,
exit-code: u32,
--pad0: list,
duration-ns: u64,
comm: list,
filename: list,
exit-event: s8,
}
}

wit-bindgen-guest-rust 会自动为wit文件夹中的所有类型信息生成rust类型,例如:

#[repr(C, packed)]
#[derive(Debug, Copy, Clone)]
struct Event {
    pid: i32,
    ppid: i32,
    exit_code: u32,
    __pad0: [u84],
    duration_ns: u64,
    comm: [u816],
    filename: [u8127],
    exit_event: u8,
}

编写用户态加载和处理代码

为了在 WASI 上运行,需要在 main.rs 中添加 #![no_main] 属性,并且 main 函数需要采用类似于以下的形式:

#[export_name = "__main_argc_argv"]
fn main(_env_json: u32, _str_len: i32) -> i32 {

    return 0;
}

用户态加载挂载代码,与C/C++类似:

    let obj_ptr =
        binding::wasm_load_bpf_object(bpf_object.as_ptr() as u32, bpf_object.len() as i32);
    if obj_ptr == 0 {
        println!("Failed to load bpf object");
        return 1;
    }
    let attach_result = binding::wasm_attach_bpf_program(
        obj_ptr,
        "handle_exec".as_ptr() as u32,
        "".as_ptr() as u32,
    );
    ...

qt写一个简单的定时关机程序_网站用什么程序写_c写一个从1加到100的程序

轮询环缓冲区:

    let map_fd = binding::wasm_bpf_map_fd_by_name(obj_ptr, "rb".as_ptr() as u32);
    if map_fd < 0 {
        println!("Failed to get map fd: {}", map_fd);
        return 1;
    }
    // binding::wasm
    let buffer = [0u8256];
    loop {
        // polling the buffer
        binding::wasm_bpf_buffer_poll(
            obj_ptr,
            map_fd,
            handle_event as i32,
            0,
            buffer.as_ptr() as u32,
            buffer.len() as i32,
            100,
        );
    }

使用处理程序接收返回值:


extern "C" fn handle_event(_ctx: u32, data: u32, _data_sz: u32) {
    let event_slice = unsafe { slice::from_raw_parts(data as *const Event, 1) };
    let event = &event_slice[0];
    let pid = event.pid;
    let ppid = event.ppid;
    let exit_code = event.exit_code;
    if event.exit_event == 1 {
        print!(
            "{:<8} {:<5} {:<16} {:<7} {:<7} [{}]",
            "TIME",
            "EXIT",
            unsafe { CStr::from_ptr(event.comm.as_ptr() as *const i8) }
                .to_str()
                .unwrap(),
            pid,
            ppid,
            exit_code
        );
        ...
}

接下来就可以使用cargo来编译运行:

$ cargo build --target wasi32-wasm
$ sudo wasm-bpf ./target/wasm32-wasi/debug/rust-helloworld.wasm
TIME     EXEC  sh               180245  33666   /bin/sh
TIME     EXEC  which            180246  180245  /usr/bin/which
TIME     EXIT  which            180246  180245  [0] (1ms)
TIME     EXIT  sh               180245  33666   [0] (3ms)
TIME     EXEC  sh               180247  33666   /bin/sh
TIME     EXEC  ps               180248  180247  /usr/bin/ps
TIME     EXIT  ps               180248  180247  [0] (23ms)
TIME     EXIT  sh               180247  33666   [0] (25ms)
TIME     EXEC  sh               180249  33666   /bin/sh
TIME     EXEC  cpuUsage.sh      180250  180249  /root/.vscode-server-insiders/bin/a7d49b0f35f50e460835a55d20a00a735d1665a3/out/vs/base/node/cpuUsage.sh

使用 OCI 镜像发布和管理 eBPF 程序

开放容器合约 (OCI) 是一种轻量级、开放的治理结构,定义了容器技术的规范和标准。 它在 Linux 基金会的支持下成立,由各大软件公司组成,致力于围绕容器格式和运行时创建开放的行业标准。 这包括用于与容器注册表配合使用的 API,正式名称为 OCI 分发规范(又名“分发规范”)。

c写一个从1加到100的程序_qt写一个简单的定时关机程序_网站用什么程序写

Docker还宣布了其与WebAssembly(Docker+Wasm)集成的首个技术预览网站用什么程序写,并表示该公司已作为投票成员加入字节码联盟。 Docker+Wasm 使开发者能够更轻松地快速构建针对 Wasm 运行时的应用程序。

借助 Wasm 的相关生态,eBPF 程序可以非常方便地发布、下载和管理。 例如,使用 wasm-to-oci 工具,可以将 Wasm 程序打包为 OCI 镜像,以获得类似 docker 的体验:

wasm-to-oci push testdata/hello.wasm .azurecr.io/wasm-to-oci:v1
wasm-to-oci pull .azurecr.io/wasm-to-oci:v1 --out test.wasm

我们还将其集成到了eunomia-bpf的ecli工具中。 您可以通过一行命令从云端的Github Packages下载并运行eBPF程序,或者通过Github Packages发布:

# push to Github Packages
ecli push https://ghcr.io/eunomia-bpf/sigsnoop:latest
# pull from Github Packages
ecli pull https://ghcr.io/eunomia-bpf/sigsnoop:latest
# run eBPF program
ecli run https://ghcr.io/eunomia-bpf/sigsnoop:latest

在LMP项目的eBPF Hub中,我们做了一些尝试,创建符合OCI标准的Wasm-eBPF应用程序,并使用ORAS来简化和扩展eBPF应用程序的开发、分发、加载和运行能力[11],以及基于 Wasm 同时使用多个应用程序。 不同语言的eBPF用户态数据处理插件开发实践。 基于最新的 Wasm-bpf 框架,可以继续进行更多的探索性工作。 我们希望尝试为eBPF和Wasm程序构建一个完整的包管理系统,以及更多可以探索的应用场景。

总结

本文以 Rust 语言为例,讨论如何使用 Rust 编写 eBPF 程序并编译成 Wasm 模块,并使用 OCI 镜像来发布、部署和管理 eBPF 程序,以获得类似 Docker 的体验。 更完整的代码请参考我们的Github仓库:

接下来,我们将继续构建在 Wasm 中开发和运行多语言 eBPF 程序的体验,提供更完整的示例、用户态开发库/工具链以及更具体的应用场景。

参考