Design: поддерживает сокеты (UDP и TCP)?

Созданный на 24 нояб. 2018  ·  12Комментарии  ·  Источник: WebAssembly/design

поддерживает сокеты (UDP и TCP)? если нет, есть план? Благодарю.

Самый полезный комментарий

Я думаю, что WebAssembly или даже WebAPI должны поддерживать протоколы нижнего уровня, такие как TCP и UDP и т. Д. Либо WebRTC, либо WebSocket - это протокол верхнего уровня, который имеет множество ненужных вещей и ограничений. Например, в некоторых случаях мы не могли создавать полифилы соединений QUIC или использовать настраиваемое управление передачей TCP.

Если нужно беспокоиться о безопасности, мы могли бы установить некоторые правила. Например, мы могли бы сделать предварительный запрос политик CORS.

Все 12 Комментарий

Его можно заархивировать, передав функции от хоста.

Я хочу перенести мою сетевую программу, которая использует udp, но не может найти подходящих функций.

@ csy2002 Если вы используете C или C ++, вы можете попробовать Emscripten .

Он компилирует программы C / C ++ в WebAssembly и предоставляет оболочки WebAssembly для stdlib C, stdlib C ++, SDL, OpenGL и других.

Во многих случаях программы на C / C ++ работают с Emscripten без каких-либо модификаций.

@Pauan, спасибо за ответ. мой собственный код использует c или c ++, и я хочу использовать udp для передачи медиапотока (видео или аудиоданных), но не могу найти подходящие функции.
по некоторым причинам я не могу использовать webrtc для мультимедиа, поэтому справедливо нашел другое решение.

@ csy2002 Я не знаю C или C ++, но я понимаю, что Emscripten поддерживает (в основном) всю stdlib C / C ++, поэтому существующие функции C / C ++ должны работать нормально. Итак, ваш существующий код должен работать.

Однако, несмотря на то, что вы можете использовать существующие API C / C ++, он будет внутренне использовать WebSockets для подключения , поэтому ваш сервер должен принимать WebSockets. А WebSockets - это только TCP.

Это не ограничение в WebAssembly, это ограничение в самом веб-браузере: браузер позволяет использовать только HTTP (S), WebSockets или WebRTC . Он не поддерживает сырые сокеты (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, это ограничение в самом веб-браузере: браузер позволяет использовать только HTTP (S), WebSockets или WebRTC. Он не поддерживает сырые сокеты (UDP или TCP).

Я не думаю, что это когда-нибудь будет поддержано. Любые комментарии?

@ondrejtomcik Я не являюсь членом рабочих групп WebAssembly или W3C, поэтому не могу это комментировать.

Но, по моему личному мнению, эта функция должна быть встроена в сам браузер, а не в Wasm, поэтому было бы лучше открыть новую проблему с W3C.

Как упоминалось выше, если вы ориентируетесь на Интернет (через Emscripten), вам, вероятно, придется перенести свою сетевую логику для использования WebSockets или опробовать WebTransport .

Если вы ориентируетесь на серверные среды, обратите внимание на WASI, он еще не реализован, но есть запросы функций (https://github.com/bytecodealliance/wasmtime/issues/70).

Это не то, что входит в сам WebAssembly: это предоставляется хостом / устройством для внедрения.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

void4 picture void4  ·  5Комментарии

Artur-A picture Artur-A  ·  3Комментарии

beriberikix picture beriberikix  ·  7Комментарии

aaabbbcccddd00001111 picture aaabbbcccddd00001111  ·  3Комментарии

nikhedonia picture nikhedonia  ·  7Комментарии