web-dev-qa-db-fra.com

Est-il possible d'utiliser UDP avec socket.io?

J'ai un jeu sur lequel je travaille et j'ai entendu dire que UDP est supérieur pour les jeux en temps réel. Je sais que socket.io utilise TCP et je me demandais s'il y avait un moyen de le basculer vers UDP. J'ai essayé de le rechercher, mais je n'ai trouvé que des publications datant d'environ 2012 qui disaient qu'UDP n'était expérimental que dans navigateurs.

18
Dennis Subachev

À partir d'un navigateur standard, ce n'est pas possible.

À partir d'un client de navigateur, socket.io Utilise le transport http ou webSocket. http et webSocket sont des connexions TCP et non des connexions UDP. Ainsi, le client de navigateur socket.io n'utilise pas UDP - il utilise TCP.

Pour autant que je sache, il n'y a pas de prise en charge UDP standard dans les navigateurs accessibles à partir de la page HTML ordinaire Javascript, vous ne pouvez donc même pas vraiment essayer de créer votre propre couche qui utilise UDP.

Autres références sur le sujet:

Pourquoi ne puis-je pas envoyer de paquets UDP à partir d'un navigateur

Lecture à partir du port udp dans le navigateur

Chrome prend en charge TCP et les sockets UDP

Écrivez une extension chrome pour prendre en charge UDP dans le navigateur

Comment envoyer un paquet UDP avec Web RTC - Javascript?

Comment parler aux sockets UDP avec HTML5?

Lecture à partir du port udp dans le navigateur

UDP peut être un transport souhaitable dans certaines circonstances lorsque vous souhaitez que le paquet soit livré le plus tôt possible, mais s'il ne peut pas être livré immédiatement, alors laissez-le simplement tomber. Ceci est parfois utile dans les jeux ou même le streaming vidéo où le prochain paquet contiendra simplement la prochaine mise à jour, donc si la précédente n'a pas abouti, alors ce n'est pas grave et vous préféreriez ne pas TCP essayer de retransmettre le paquet perdu. Mais, les navigateurs ne prennent pas en charge l'utilisation du protocole UDP à partir de la page Web Javascript.

Si vous souhaitez vous connecter à un périphérique ou un serveur UDP à partir d'un navigateur, vous devrez utiliser une sorte de proxy pour que votre code de navigateur puisse parler au proxy via TCP (http ou webSocket), puis le proxy peut gérer la communication UDP réelle avec le périphérique.


Il serait possible d'utiliser la bibliothèque socket.io à partir de node.js ou d'une autre plate-forme sans navigateur et d'écrire votre propre complément de transport UDP pour socket.io qui est construit sur le support UDP natif de votre plate-forme. Je crois que socket.io a un transport quelque peu enfichable, vous pouvez donc essayer de faire votre propre transport, puis configurer le client et le serveur pour utiliser ce transport. Ce n'est pas possible à partir du navigateur car il n'y a pas de support UDP sous-jacent dans le navigateur sur lequel vous pouvez construire votre transport, mais dans des environnements non-navigateur comme node.js, vous pouvez le faire.

22
jfriend00

Bien que la question soit déjà répondue, je tiens à souligner qu'il existe des moyens d'implémenter socket.io avec UDP. Par exemple dgram fait exactement ce que vous recherchez.

Ceci est un tutoriel pour socket.io + UDP avec dgram.

[~ # ~] mise à jour [~ # ~] :

Alexandre Lacheze a développé un node.js package qui apporte UDP au navigateur. Il prend également en charge socket.io. La réponse est donc en quelque sorte obsolète maintenant.

MISE À JOUR 2: Il s'avère que ce n'est qu'un UDP simulé. Pas un protocole UDP réel exécuté sur le navigateur.

2
Ramazan Polat

Ce pourrait être une bonne idée d'utiliser webRTC dans ce cas qui est de nature UDP.

1
TensorVortex