Design: ソケット(udpおよびtcp)をサポートしていますか?

作成日 2018年11月24日  ·  12コメント  ·  ソース: WebAssembly/design

ソケット(udpおよびtcp)をサポートしていますか? そうでない場合は、計画がありますか? ありがとう。

最も参考になるコメント

WebAssemblyまたはWebAPIでさえ、TCPやUDPなどの下位層プロトコルをサポートする必要があると思います。WebRTCまたはWebSocketは上位層プロトコルであり、多くの不必要なものや制限が含まれています。 たとえば、QUIC接続ポリフィルを作成したり、カスタマイズされたTCP伝送制御を使用したりできない場合がありました。

セキュリティが懸念される場合は、いくつかのルールを作成できます。 たとえば、CORSポリシーのプリフライトリクエストを行うことができます。

全てのコメント12件

ホストから関数を渡すことでアーカイブできます。

udpを使用するネットワークプログラムを移植したいのですが、適切な機能が見つかりません。

@ csy2002CまたはC ++を使用している場合は、 Emscriptenを使用してみてください。

C / C ++プログラムをWebAssemblyにコンパイルし、C stdlib、C ++ stdlib、SDL、OpenGLなどのWebAssemblyラッパーを提供します。

多くの場合、C / C ++プログラムは変更なしでEmscriptenで動作します。

@Pauanお返事ありがとうございます。 私のネイティブコードはcまたはc ++を使用しており、udpを使用してメディアストリーム(ビデオまたはオーディオデータ)を転送したいのですが、適切な機能が見つかりません。
いくつかの理由で、私はメディアにwebrtcを使用できないので、別の解決策を見つけるだけです。

@ csy2002CまたはC ++

ただし、既存のC / C ++ APIを使用できる場合でも、接続

これはWebAssemblyの制限ではなく、Webブラウザー自体の制限です。ブラウザーではHTTP(S)、WebSocket、またはWebRTCのみを使用できます。 rawソケット(UDPまたはTCP)はサポートされていません。

ブラウザを使用していて、UDPの信頼性の低い通信が必要な場合、標準的なオプションはWebRTCを使用することだけです。 WebRTCは通常、ユーザー間のピアツーピア接続用ですが、サーバーをWebRTC「ピア」にして、ユーザーがサーバーへのWebRTC接続を開くようにすることもできます。 私の知る限り、これは十分に確立された領域ではないので、誰かに指摘するための完全な例はわかりません。 ( PeerJSは、クライアント側で使用されているWebRTCデータチャネルの簡単な例です。)また、すべてのブラウザー(Edgeなど)がWebRTCデータチャネルをサポートしているわけではないため、WebRTCのオーディオ+ビデオサポートのみを使用している場合を除き、これらのブラウザーをサポートする場合は、WebSocket(TCP)フォールバック。

WebAssemblyまたはWebAPIでさえ、TCPやUDPなどの下位層プロトコルをサポートする必要があると思います。WebRTCまたはWebSocketは上位層プロトコルであり、多くの不必要なものや制限が含まれています。 たとえば、QUIC接続ポリフィルを作成したり、カスタマイズされたTCP伝送制御を使用したりできない場合がありました。

セキュリティが懸念される場合は、いくつかのルールを作成できます。 たとえば、CORSポリシーのプリフライトリクエストを行うことができます。

たとえば、CORSポリシーのプリフライトリクエストを行うことができます。

多くのパブリックサーバーは、これらのプリフライトリクエストのサポートを追加しません。 応答がない場合は、「このサーバーに制限はありません」として扱うことができます。 しかし、なぜ特別な許可を作成しないのですか? この種の接続は、ユーザーの明示的な承認なしに行うべきではないと思います。

多くのパブリックサーバーは、これらのプリフライトリクエストのサポートを追加しません。 応答がない場合は、「このサーバーに制限はありません」として扱うことができます。 しかし、なぜ特別な許可を作成しないのですか? この種の接続は、ユーザーの明示的な承認なしに行うべきではないと思います。

セキュリティチェックはクライアント(ブラウザなど)によってのみ行われるため、パブリックサーバーがプリフライトリクエストをサポートしているかどうかは問題ではないと思います。 パブリックサーバーが正しいプリフライト応答で応答しない場合、クライアントは下位レベルのAPIの後続の呼び出しをブロックできます。

@Pauanこの問題が解決されない理由はありますか? あなたのコメントに基づいて

これはWebAssemblyの制限ではなく、Webブラウザー自体の制限です。ブラウザーではHTTP(S)、WebSocket、またはWebRTCのみを使用できます。 rawソケット(UDPまたはTCP)はサポートされていません。

これがサポートされることはないと思います。 コメントはありますか?

@ondrejtomcik私はWebAssemblyまたはW3Cワーキンググループの

しかし、私の個人的な意見では、この機能はWasmではなくブラウザ自体に組み込まれるべきなので、W3Cで新しい問題を開く方がよいでしょう。

上記のように、(Emscriptenを介して)Webをターゲットにしている場合は、 WebSocketを使用するためにネットワークロジックを移植するか、 WebTransportを試す

サーバー環境をターゲットにしている場合は、WASIを確認してください。まだ実装されていませんが、機能のリクエストがあります(https://github.com/bytecodealliance/wasmtime/issues/70)。

これはWebAssembly自体に含まれるものではなく、ホスト/エンベッダーによって提供されます。

このページは役に立ちましたか?
0 / 5 - 0 評価

関連する問題

beriberikix picture beriberikix  ·  7コメント

JimmyVV picture JimmyVV  ·  4コメント

frehberg picture frehberg  ·  6コメント

void4 picture void4  ·  5コメント

badumt55 picture badumt55  ·  8コメント