思思久久精品无码|久久一区二区精品综合|天堂亚洲aⅤ在线观看|国产日韩一区二区2022|搡老女人老91妇女老熟女|成人无码精品免费视频在线|在线人成精品视频在线观看免费|久久人人爽人人爽人人片av高

深度揭秘(cloudflare是什么服務(wù)器)cloud server是什么意思,宣布 Cloudflare Workers 支持 WASI,劉備文學(xué)是什么意思,

保健品 nanfang 2023-08-23 00:57 150 0

1.cloudflare是啥

今天,我們宣布 Cloudflare Workers 試驗(yàn)性支持 WASI(WebAssembly 系統(tǒng)接口),并在 wrangler2 中提供支持,以便大幅提升工作便利性我們一如既往對(duì) 家庭教師2Primer 整個(gè) WebAssembly 生態(tài)系統(tǒng)充滿希望,并十分積極地采納新開(kāi)發(fā)的標(biāo)準(zhǔn)。

2.cloudflare云服務(wù)器

WebAssembly 快速入門(mén)那么,WASI 到底是什么呢?若要了解 WASI 以及我們對(duì)其充滿希望的理由,就有必要快速回顧一下 WebAssembly 以及它周邊的生態(tài)系統(tǒng)借助 WebAssembly,使用編譯語(yǔ)言編寫(xiě)的代碼未來(lái)有望能夠編譯為通用二進(jìn)制格式并以接近原生速度的速度在安全沙盒中運(yùn)行。

3.cloud services什么意思

雖然 WebAssembly 是圍繞瀏覽器設(shè)計(jì)的,但模型迅速擴(kuò)展到服務(wù)器端平臺(tái),例如 Cloudflare Workers(自 2017家庭教師2 年以來(lái)一直支持 WebAssembly)WebAssembly 最初設(shè)計(jì)為。

4.cloud services

與 Javascript 一起運(yùn)行,并需要開(kāi)發(fā)人員直接與 Javascript 交互才能訪問(wèn)沙盒之外的內(nèi)容換句話說(shuō),WebAssembly 并沒(méi)有為 I/O 任務(wù)提供任何標(biāo)準(zhǔn)接口,例如與文件交互、訪問(wèn)網(wǎng)絡(luò)或讀取系統(tǒng)時(shí)鐘。

5.cloudservice是什么意思

這意味著,如果要響應(yīng)外部事件,開(kāi)發(fā)人員需要負(fù)責(zé)在 JavaScript 中處理該事件,并直接調(diào)用從 WebAssembly 模塊導(dǎo)出的函數(shù)類(lèi)似地,如果要從 WebAssembly 中執(zhí)行 I/O,就需要在 Javascript 中實(shí)家庭教師2現(xiàn)該邏輯并將其導(dǎo)入 WebAssembly 模塊中。

6.cloudflare basic service

Emscripten 等自定義工具鏈或 wasm-bindgen 等庫(kù)應(yīng)運(yùn)而生,用于簡(jiǎn)化這一工作,但它們特定于語(yǔ)言,會(huì)帶來(lái)極大的復(fù)雜度,并且使代碼顯得十分臃腫我們甚至構(gòu)建了自己的庫(kù) workers-rs,使用 wasm-bindgen 以試圖讓在 Rust 中編寫(xiě)應(yīng)用程序感覺(jué)就像在 Worker 中原生那樣 – 但最后我們發(fā)現(xiàn),這不僅很難維護(hù),而且還需要開(kāi)發(fā)人員編寫(xiě)特定于 Workers 的代碼,并且這些代碼無(wú)法移植到 Workers 生態(tài)系統(tǒng)之外。

7.cloudflare是什么意思中文翻譯家庭教師2

我們需要更強(qiáng)的功能WebAssembly 系統(tǒng)接口 (WASI)WASI 旨在提供任何編譯到 WebAssembly 的語(yǔ)言都可以作為目標(biāo)的標(biāo)準(zhǔn)接口點(diǎn)擊此處閱讀 Lin Clark 的原創(chuàng)文章,其中很漂亮地做了介紹 – 甚至還做了代碼卡通。

8.cloudflare nameserver

簡(jiǎn)而言之,Lin 將 WebAssembly 形容為適合“概念機(jī)器”的匯編語(yǔ)言,而 WASI 則是適合“概念操作系統(tǒng)”的系統(tǒng)接口這種系統(tǒng)接口標(biāo)準(zhǔn)化為現(xiàn)有工具鏈針對(duì) wasm32-wasi 目標(biāo)交叉編譯現(xiàn)有代碼庫(kù)鋪平了道路。

9.cloud servers

通過(guò) wasi-sdk 和 Rust 工具鏈已經(jīng)實(shí)現(xiàn)了極大進(jìn)展家庭教師2,尤其是在 Clang/LLVM 中這些工具鏈利用某個(gè)版本的 Libc,它提供 POSIX 標(biāo)準(zhǔn) API 調(diào)用,這些調(diào)用是在 WASI“系統(tǒng)調(diào)用”基礎(chǔ)上構(gòu)建的。

10.cloudflare服務(wù)器怎么樣

甚至在 TinyGo 和 SwiftWasm 這樣更為邊緣化的工具鏈中也有基本實(shí)現(xiàn)實(shí)際說(shuō)來(lái),這意味著現(xiàn)在可以編寫(xiě)的應(yīng)用程序不僅能夠與實(shí)現(xiàn)該標(biāo)準(zhǔn)的任何 WebAssembly 運(yùn)行時(shí)互操作,還能與任何符合 POSIX 標(biāo)準(zhǔn)的系統(tǒng)互操作!這意味著,完全相同的“Hello World!” 可在本地 Linux/Mac/Windows WSL 機(jī)器上運(yùn)行。

代碼細(xì)節(jié)WASI 聽(tīng)起來(lái)很不錯(cuò),但它能真正簡(jiǎn)化編程工家庭教師2作嗎?誰(shuí)用誰(shuí)知道我們來(lái)看一個(gè)例子,看看它如何運(yùn)用于實(shí)踐首先,生成一個(gè)基本的 Rust“Hello, world!”應(yīng)用程序,對(duì)其進(jìn)行編譯并運(yùn)行$ cargo new hello_world $ cd ./hello_world $ cargo build --release Compiling hello_world v0.1.0 (/Users/benyule/hello_world) Finished release [optimized] target(s) in 0.28s $ ./target/relea家庭教師2se/hello_world Hello, world!

這是再簡(jiǎn)單不過(guò)的了可以看到,我們只定義了一個(gè) main() 函數(shù),接著是用一個(gè) println 語(yǔ)句打印到 stdoutfn main() { println!("Hello, world!"); }。

現(xiàn)在,我們針對(duì) wasm32-wasi 目標(biāo)編譯這個(gè)程序,并在 Wasmtime 等“現(xiàn)成”的 wasm 運(yùn)行時(shí)中運(yùn)行$ npx wrangler@wasm dev target/wasm32-wasi/release/hello_world.wasm $ curl http:家庭教師2//localhost:8787/ Hello, world!。

太棒了!相同的代碼在多個(gè) POSIX 環(huán)境中順利編譯并運(yùn)行最后,來(lái)看看我們剛才為 Wasmtime 生成的二進(jìn)制文件,但這次改用 Wrangler2 將其發(fā)布到 Workers$ npx wrangler@wasm dev target/wasm32-wasi/release/hello_world.wasm $ curl http://localhost:8787/ Hello, world!。

不出所料,成功了!相同的代碼兼容了多個(gè) POSIX 環(huán)境,并且相同的二進(jìn)制文件兼容了家庭教師2多個(gè) WASM 運(yùn)行時(shí)在云中運(yùn)行 CLI 應(yīng)用細(xì)心的讀者可能會(huì)注意到,我們?cè)谕ㄟ^(guò) cURL 發(fā)出的 HTTP 請(qǐng)求中做了一點(diǎn)手腳。

在這個(gè)例子中,我們實(shí)際上是分別使用 HTTP 請(qǐng)求和響應(yīng)主體來(lái)與 Worker 之間進(jìn)行 stdin 和 stdout 流傳輸利用這個(gè)模式,可以實(shí)現(xiàn)一些非常有意思的用例,具體來(lái)說(shuō),設(shè)計(jì)為在命令行中運(yùn)行的程序可以作為“服務(wù)”部署到云中。

“Hexyl”就是一個(gè)完全開(kāi)箱即用的例子這里,我們對(duì)本地機(jī)器上的二進(jìn)制文件執(zhí)行“cat”命令,并通過(guò)“pipe”命令將輸出輸送到 curl,后者會(huì)通過(guò) POST 命令將輸出發(fā)布到我們的服務(wù),并流傳輸回結(jié)果。

按照我們用于編譯“Hello 家庭教師2World!”的步驟,我們可以編譯 hexyl$ git clone git@github.com:sharkdp/hexyl.git $ cd ./hexyl $ cargo build --target wasm32-wasi --release

無(wú)需任何修改,我們就能利用一個(gè)現(xiàn)實(shí)的程序來(lái)創(chuàng)建立即就能運(yùn)行或部署的用例同樣,我們讓 wrangler2 預(yù)覽 hexyl,但這次給它提供一些輸入$ npx wrangler@wasm dev target/wasm32-wasi/release/hexyl.wasm $ echo "Hello, wo家庭教師2rld\!" | curl -X POST --data-binary @- http://localhost:8787 ┌────────┬─────────────────────────┬─────────────────────────┬────────┬────────┐ │00000000│ 48 65 6c 6c 6f 20 77 6f ┊ 72 6c 64 21 0a │Hello wo┊rld!_ │ └────────┴─────────────────────────┴─────────────────────────┴─家庭教師2───────┴────────┘。

點(diǎn)擊 https://hexyl.examples.workers.dev,自己試一試echo "Hello world\!" | curl https://hexyl.examples.workers.dev/ -X POST --data-binary @- --output -。

一個(gè)更有用、但也更復(fù)雜一些的例子就是將 swc (swc.rs) 等實(shí)用工具部署到云中并將其用作按需 JavaScript/TypeScript 跨平臺(tái)編譯服務(wù)這里,我們可以執(zhí)行幾個(gè)額外步驟,確保編譯的輸出盡可能小,但除此之外,它基本上是開(kāi)箱即用的。

這些步驟在 https://家庭教師2github.com/zebp/wasi-example-swc 中詳述,但目前我們只是粗略概括一下,看看托管示例$ echo "const x = (x, y) => x * y;" | curl -X POST --data-binary @- https://swc-wasi.examples.workers.dev/ --output - var x=function(a,b){return a*b}。

最后,我們還可以對(duì) C/C++ 執(zhí)行相同的操作,但需要做一些修改,將 Makefile 調(diào)整正確這里有一個(gè)例子,說(shuō)明如何編譯 zstd 并將其上傳作為流傳輸壓縮服務(wù)ht家庭教師2tps://github.com/zebp/wasi-ex。

ample-zstd$ echo "Hello world\!" | curl https://zstd.examples.workers.dev/ -s -X POST --data-binary @- | file -

如果我想在 JavaScript Worker 中使用 WASI 該怎么辦?利用 Wrangler,可以非常輕松地部署代碼,不用管 Workers 生態(tài)系統(tǒng),但在一些情況下,可能實(shí)際上需要從 Javascript 調(diào)用基于 WASI 的 WASM 模塊。

這可以使用以下簡(jiǎn)單樣板來(lái)實(shí)現(xiàn)https://github.com家庭教師2/cloudflare/workers-wasi 中將保留一份更新的 READMEimport { WASI } from "@cloudflare/workers-wasi"; import demoWasm from "./demo.wasm"; export default { async fetch(request, _env, ctx) { // Creates a TransformStream we can use to pipe our stdout to our response body. c家庭教師2onst stdout = new TransformStream(); const wasi = new WASI({ args: [], stdin: request.body, stdout: stdout.writable, }); // Instantiate our WASM with our demo module and our configured WASI import. const instance = new WebAssembly.Instance(dem家庭教師2oWasm, { wasi_snapshot_preview1: wasi.wasiImport, }); // Keep our worker alive until the WASM has finished executing. ctx.waitUntil(wasi.start(instance)); // Finally, lets reply with the WASMs output. return new Response(stdout.readable); }, 家庭教師2 };。

現(xiàn)在借助 JavaScript 樣板和 wasm,我們可以利用 Wrangler 的 WASM 功能輕松部署 Worker$ npx wrangler publish Total Upload: 473.89 KiB / gzip: 163.79 KiB Uploaded wasi-javascript (2.75 sec) Published wasi-javascript (0.30 sec) wasi-javascript.zeb.workers.dev。

回到未來(lái)過(guò)去幾十年積極關(guān)注編程發(fā)展的讀者可能會(huì)注家庭教師2意到,這非常類(lèi)似于 RFC3875,也就是我們常說(shuō)的 CGI(公共網(wǎng)關(guān)接口)雖然我們這個(gè)例子顯然不符合該規(guī)范,但不難想象,完全可以加以擴(kuò)展,將基本“命令行”應(yīng)用程序的 stdin 轉(zhuǎn)變?yōu)橥耆墒斓?http 處理程序。

在此,我們非??释私忾_(kāi)發(fā)人員對(duì)此有何看法。請(qǐng)?jiān)?Discord 或 Twitter 上與我們分享您所構(gòu)建的成果!隨時(shí)歡迎與我們?nèi)〉寐?lián)絡(luò),獲取更多相關(guān)資訊CLOUDFLARE-現(xiàn)代企業(yè)的全球云平臺(tái)

標(biāo)簽列表

    公主岭市| 樟树市| 潜山县| 定襄县| 当雄县| 城固县| 顺平县| 澄城县| 洛川县| 海原县| 奎屯市| 惠来县| 岳阳县| 若尔盖县| 龙海市| 高雄县| 太和县| 茶陵县| 綦江县| 佛冈县| 垫江县| 荣昌县| 石河子市| 巨鹿县| 静宁县| 龙胜| 象州县| 垦利县| 灵寿县| 拉萨市| 公安县| 二连浩特市| 永丰县| 宕昌县| 禹州市| 太原市| 丹阳市| SHOW| 南平市| 兴安盟| 利川市|