86 votes

Comment établir une connexion de navigateur à navigateur (peer to peer) ?

Comment puis-je écrire un site web en utilisant HTML5 , CSS y JavaScript du côté client qui permettra connexion directe tcp/ip entre les navigateurs clients une fois la page chargée .

J'ai besoin de faire cela pour réduire la latence car le site exigera que l'entrée d'un des utilisateurs soit transmise à l'autre utilisateur dès que possible. Envoyer des données du client A au serveur puis au client B n'est pas une bonne option.

J'ai lu les messages précédents sur ce sujet, mais je n'ai trouvé aucune solution/exemple fonctionnel. D'après ce que j'ai lu, la connexion directe entre les clients peut être faite en utilisant des plugins comme Silverlight, Java ou Flash.

Existe-t-il une solution qui ne nécessite pas de plugins ? Je voudrais utiliser uniquement JavaScript.

3 votes

Connexion entre pairs WebRTC sans serveur de signalisation : blog.printf.net/articles/2013/05/17/

1 votes

Voir aussi PeerJS un projet ayant un certain attrait dans ce domaine, qui a des résultats relativement satisfaisants. Support du navigateur .

1 votes

La méthode la plus simple consiste à utiliser httprelay.io et les appels AJAX. Il est rapide, moins de 50 ms.

126voto

Dennis Points 1336

Sur Stackoverflow, il y a plusieurs sujets sur les connexions P2P dans les navigateurs :

  1. Le HTML5 permettra-t-il aux applications web d'établir des connexions HTTP de type peer-to-peer ?
  2. Quelles sont les techniques disponibles pour faire du P2P dans le navigateur ?
  3. HTML5 supporte-t-il le peer-to-peer (et pas seulement les WebSockets) ?
  4. Les Websockets HTML5 peuvent-elles connecter 2 clients (navigateurs) directement sans utiliser de serveur (P2P) ?
  5. Est-il possible de créer des connexions peer-to-peer dans un navigateur web ?
  6. Les websockets permettent-ils la communication p2p (de navigateur à navigateur) ?
  7. HTML 5 Possibilités de vidéo Peer to Peer ?
  8. WebRTC est-il déjà implémenté dans les navigateurs ?

Comme cela a été mentionné dans la plupart des sujets, les deux ébauches de travail du HTML5 2008 comportaient une section "Connexions de pair à pair" :

Depuis le Projet de travail du W3C 12 février 2009 la section "connexions peer-to-peer" a disparu. Mais cette connexion P2P n'a pas disparu. Elle est de retour sous le nom de PeerConnection dans les spécifications WebRTC (Real-Time Communications) :

Depuis le 31 octobre 2011, le projet de l'éditeur du W3C est un projet de travail officiel :

La seule implémentation de PeerConnection (basée sur UDP) existe dans le WebKit modifié par les laboratoires Ericsson (mai 2011), qui fonctionne assez bien. Certains correctifs sont dans WebKit maintenant (Oct. 2011 -- voir les mises à jour ci-dessous !):

En outre, l'initiative WebRTC est un projet de Google, Mozilla et Opera. Ainsi, ils poursuivent la spécification sur PeerConnection :

Chrome (qui utilise WebKit) sera probablement le premier grand navigateur à prendre en charge WebRTC avec PeerConnection :

Depuis le 18 janvier 2012, Chrome prend également en charge WebRTC . Il peut être utilisé dans le Canal Dev (Windows, OSX, Linux) et la version Canary (Windows et OSX) par le permettant sous chrome://flags . Il ne prend en charge que MediaStream comme la vidéo et l'audio et peut être testé avec plusieurs Démos . Transfert de données d'application comme String / ArrayBuffer /... n'est pas pris en charge jusqu'à présent.

Depuis 16 mars 2012, le projet de rédaction du WebRTC sépare un "API de données pair-à-pair" pour envoyer et recevoir des données d'application génériques ( String , ArrayBuffer y Blob ). Chromium veut implémenter l'API de données bientôt (10 avril 2012).

Le 3 avril, Mozilla a publié un premier exemple de fonctionnement sur WebRTC pour Firefox également.

DataChannel est prévu pour la version 25 de Chrome, derrière un drapeau, en attendant il peut être testé dans Firefox Nightly/Aurora (12 décembre 2012) :

2018 : Les DataChannels sont encore expérimentaux, mais disponibles dans les versions actuelles de Chrome et Firefox :

11 votes

Nous sommes en 2014 ici, pouvez-vous mettre à jour votre excellent poste avec les progrès récents ?

1 votes

@myroslav webrtc.org/interop est un bon point de départ. À l'heure actuelle, Firefox, Chrome et Opera offrent un support complet et peuvent interagir avec les adaptateurs addequate.

0 votes

Pouvez-vous s'il vous plaît mettre à jour votre excellent post avec les progrès récents !

6voto

Emil Ivanov Points 18594

Je vais devoir vous décevoir - ce n'est actuellement pas possible avec seulement JavaScript. Les websockets (et Socket.IO) permettent une connexion de type socket entre le client et le serveur, mais pas entre les clients. Votre option est un plugin - qu'il soit Flash, Silverlight, Java ou personnalisé.

Ce que vous pouvez faire, c'est utiliser socket.io et émuler cela en écrivant un simple serveur proxy.

0 votes

Êtes-vous certain que WebSocket ne permet pas le p2p direct entre 2 navigateurs ? d'après ce qui est dit sur wikipedia, il semble que ce soit possible : "WebSocket est une technologie fournissant des canaux de communication bidirectionnels, full-duplex, sur une seule socket TCP (Transmission Control Protocol). Elle est conçue pour être mise en œuvre dans les navigateurs et les serveurs Web, mais elle peut être utilisée par toute application client ou serveur."

6 votes

La question abordée est que vous ne pouvez pas avoir un navigateur LISTEN / agir comme un serveur. Vous pourrez communiquer avec n'importe quel serveur en full-duplex, mais vos consommateurs ne pourront pas devenir des serveurs. De plus, vous rencontrerez un million de problèmes avec les pare-feu si vous le faites. La solution d'Emil fonctionnera mieux, bien que plus lentement.

0 votes

Techniquement, les websockets peuvent être utilisés partout. Mais dans les navigateurs, en raison des contraintes de sécurité, cela ne se produira pas. ghayes l'a expliqué. Notez également que cette solution sera probablement être plus rapide En effet, les serveurs sont généralement placés dans des endroits où les capacités de bande passante sont énormes. Ainsi, votre serveur pourra gérer 100 clients sans problème, alors qu'en utilisant le p2p réel, vous saturerez la connexion des utilisateurs très rapidement.

3voto

Je voudrais attirer votre attention sur le fait que la plupart des utilisateurs sont aujourd'hui derrière des NAT ou des pare-feu, ce qui signifie que vous ne pouvez pas facilement établir une connexion entrante avec l'ordinateur de l'utilisateur. Votre idée ne fonctionnerait donc (si elle est possible) que dans certains cas et rendrait votre solution encore plus complexe. Un système client-serveur avec éventuellement une connexion persistante (en utilisant websockets ou socket.io) est donc une meilleure option.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X