Можно ли использовать UDP с socket.io?

У меня есть игра, над которой я работаю, и я слышал, что UDP превосходит игры в реальном времени. Я знаю, что socket.io использует TCP и задавался вопросом, есть ли способ переключить его на UDP. Я попытался найти его, но нашел только сообщения со всего 2012 года, в которых говорится, что UDP является только экспериментальным в браузерах.

Ответ 1

Из стандартного браузера это невозможно.

От клиента браузера socket.io использует либо http либо транспорт через webSocket. И http и webSocket - это TCP-соединения, а не UDP-соединения. Таким образом, клиент браузера socket.io не использует UDP - он использует TCP.

Насколько я знаю, стандартная поддержка UDP в браузерах, доступная с обычной HTML-страницы Javascript, так что вы даже не можете попытаться создать свой собственный слой, который использует UDP.

Другие ссылки по теме:

Почему я не могу отправить UDP-пакеты из браузера

Чтение из порта udp в браузере

Chrome поддерживает разъемы TCP и UDP

Напишите расширение chrome для поддержки UDP в браузере

Как отправить пакет UDP с помощью Web RTC - Javascript?

Как разговаривать с сокетами UDP с HTML5?

Чтение из порта udp в браузере

UDP может быть желательным транспортом для некоторых обстоятельств, когда вы хотите, чтобы пакет был доставлен как можно скорее, но если он не может быть доставлен немедленно, просто отпустите его. Это иногда полезно для игр или даже для потоковой передачи видео, где следующий пакет будет содержать только следующее обновление, поэтому, если предыдущий не прошел, то нет ничего сложного, и вы не хотите, чтобы TCP попытался повторно передать потерянный пакет. Но браузеры не поддерживают использование протокола UDP с веб-страницы Javascript.

Если вы хотите подключиться к UDP-устройству или серверу из браузера, вам придется использовать какой-то прокси-сервер, чтобы ваш код браузера мог разговаривать с прокси-сервером через TCP (либо http, либо webSocket), а затем прокси-сервер может обрабатывать фактический UDP связь с устройством.


Можно было бы использовать библиотеку socket.io от node.js или какой-либо другой нерабочей платформы и написать свою собственную транспортную надстройку UDP для socket.io, которая построена на собственной поддержке UDP на вашей платформе. Я считаю, что socket.io имеет несколько подключаемый транспорт, поэтому вы можете попытаться сделать свой собственный транспорт, а затем сконфигурировать как клиент, так и сервер для использования этого транспорта. Это невозможно сделать в браузере, потому что в браузере нет базовой поддержки UDP, в которую вы могли бы построить свой транспорт, но в не-браузерах, таких как node.js, вы могли бы это сделать.

Ответ 2

Хотя на вопрос уже дан ответ, я хочу указать, что есть способы реализовать socket.io с UDP. Например, dgram выполняет именно то, что вы ищете.

Это учебник для socket.io + UDP с dgram.

ОБНОВЛЕНИЕ:

Александр Лачезе разработал пакет node.js , который выводит UDP в браузер. Он также поддерживает socket.io. Поэтому ответ сейчас устарел.

ОБНОВЛЕНИЕ 2: Оказывается, это всего лишь смоделированный UDP. Не настоящий протокол UDP, запущенный в браузере.