ホームページ  >  記事  >  バックエンド開発  >  Go 1.21 には、WebAssembly 経由で http をホストする機能が含まれますか?どうやって?

Go 1.21 には、WebAssembly 経由で http をホストする機能が含まれますか?どうやって?

王林
王林転載
2024-02-09 23:20:251111ブラウズ

Go 1.21 会包含通过 WebAssembly 托管 http 的功能吗?如何?

php エディタ Xiaoxin は、Go 1.21 に WebAssembly を介して HTTP をホストする機能が含まれるかどうかについての質問に喜んで答えます。現在、Go 1.21 バージョンは正式にリリースされていないため、その具体的な機能を判断することはできません。ただし、Go 言語についての知識に基づくと、Go は WebAssembly とネットワーク プログラミングの開発に非常に重点を置いているため、WebAssembly を介して HTTP をホストする機能が将来のバージョンで追加される可能性が非常に高いです。これにより、開発者はより柔軟で効率的な Web 開発ツールを利用できるようになります。最新のアップデートや機能を入手するには、引き続き Go 言語の公式リリース情報に注意を払うことをお勧めします。

質問内容

外出先でWebAssembly経由でhttpサーバーを試してみたいと思っています。 go 1.20 はブラウザ外での Web アセンブリの go のコンパイルをサポートしていないと思います。また、net/http ライブラリは tinygo に含まれていません。

https://stackoverflow.com/a/76091829 (@tachyonicbytes に感謝) を読んだ後、gotip を使用してこれを達成しようとしましたが、サーバー (またはその他のブロック/待機) を起動しようとするたびにfunction))、エラーが発生します: 致命的エラー: すべてのゴルーチンがスリープしています - デッドロック! 。 await 関数を使用して goroutine に移動しようとしましたが、単に関数が終了するか、同じエラーが発生します。 これが私がそれを実行する方法です:

リーリー

これは例です server.go:

リーリー

それでは、これは単に go 1.21 がウィップだからなのか、ブロッキング関数を起動する正しい方法が理解できないからなのか、それとも go 1.21 がそのような機能をサポートしていないからなのか?

Intel Mac 上のサーバー側 WebAssembly Runner wasm3 で Go サーバーを起動しようとしています。 http を提供することを期待していましたが、エラーがスローされるか、すぐに終了することがわかりました。

解決策

喜んでお役に立ちます。

残念ながら、wasm ネットワーキングは go 1.21 の一部にはならないようです。 wasm でのネットワークの実装は少し複雑です。コードを実行すると、次の行が表示されました:

リーリー

検査の後、次の免責事項があります: リーリー

これの難点は、wasi がソケットの部分的なサポートしか提供していないため、wasi にはまだ完全な Berkeley ソケットがないことです。

良いニュースは、実際には http を、tinygo で実行できることです。 tinygo は、go

net/http パッケージとその driver. の部分的なサポートを提供します。

これの実際的な使用法を見てみたい場合は、現在、tinygo プロジェクトを使用して

この wasm に移植しようとしています。私の記憶が正しければ、正常に動作していますが、かなり時間が経ったので、まだ変換が完了していないと思います。もしかしたら当分は無理かも知れません。

もう一つは

wasm3 部分的な wasi 実装はありますが、socket 部分は実装されていない可能性があります。 @gedw99が提案したように、wasmtime、wasmer、wasmedge、wazeroなどの他のランタイムも使用することをお勧めします。 wasmedge ソケットのサポートは充実していますが、あなたの場合、実際にはコンパイラが問題です。

以上がGo 1.21 には、WebAssembly 経由で http をホストする機能が含まれますか?どうやって?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。