ソケット(udpおよびtcp)をサポートしていますか? そうでない場合は、計画がありますか? ありがとう。
ホストから関数を渡すことでアーカイブできます。
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自体に含まれるものではなく、ホスト/エンベッダーによって提供されます。
最も参考になるコメント
WebAssemblyまたはWebAPIでさえ、TCPやUDPなどの下位層プロトコルをサポートする必要があると思います。WebRTCまたはWebSocketは上位層プロトコルであり、多くの不必要なものや制限が含まれています。 たとえば、QUIC接続ポリフィルを作成したり、カスタマイズされたTCP伝送制御を使用したりできない場合がありました。
セキュリティが懸念される場合は、いくつかのルールを作成できます。 たとえば、CORSポリシーのプリフライトリクエストを行うことができます。