¿Cómo puedo hacer una conexión de navegador a navegador (peer to peer)? [cerrado]


Cómo puedo escribir un sitio web usando HTML5, CSS and JavaScript on client side that will allow direct tcp/ip connection between the client browsers once the page is loaded.

Necesito hacer esto para reducir la latencia, ya que el sitio requerirá que la entrada de uno de los usuarios se transmita al otro usuario lo antes posible, por lo que enviar datos del cliente A al Servidor y luego al cliente B no es una buena opción.

He leído anterior los mensajes sobre este tema, pero no había ninguna solución de trabajo/ejemplos disponibles que pude encontrar. Por lo que he leído la conexión directa entre clientes se puede hacer utilizando plugins como Silverlight, Java o Flash.

¿Hay alguna solución que no requiera plugins? Me gustaría usar solo JavaScript.

Author: johnnyRose, 2011-08-11

3 answers

Aquí en Stackoverflow hay varios temas sobre conexiones P2P en navegadores:

  1. ¿HTML5 permitirá a las aplicaciones web hacer conexiones HTTP peer-to-peer?
  2. ¿Qué técnicas están disponibles para hacer P2P en el navegador?
  3. HTML5 Soporta Peer-to-Peer (y no solo WebSockets)
  4. Puede HTML5 Websockets conectar 2 clientes (navegadores) directamente sin usar un servidor (P2P)
  5. ¿Es posible crear conexiones peer-to-peer en un navegador web?
  6. ¿websockets permite la comunicación p2p (navegador a navegador)?
  7. HTML 5 Peer to Peer Posibilidades de vídeo?
  8. ¿Está WebRTC implementado en algún navegador todavía?

Como se mencionó en la mayoría de los temas, ambos borradores de trabajo HTML5 de 2008 tenían una sección " Peer-to-peer conexiones":

Desde el Borrador de Trabajo del W3C 12 de febrero de 2009 la sección "Conexiones Peer-to-peer" desapareció. Pero esta conexión P2P no se ha ido. Está de vuelta bajo el nombre PeerConnection dentro del WebRTC (Comunicaciones en tiempo Real) especificaciones:

Desde el 31 de octubre de 2011, el Borrador del Editor del W3C es un trabajo oficial proyecto:

La única implementación de PeerConnection (basada en UDP) existe en el WebKit modificado por los laboratorios Ericsson (mayo de 2011), que está funcionando bastante bien. Algunos parches están en WebKit ahora (Oct. 2011 see ver actualizaciones ¡abajo!):

Además, la iniciativa WebRTC es un proyecto de Google, Mozilla y Opera. Por lo tanto, continúan la especificación sobre PeerConnection:

Probablemente Chrome (utiliza WebKit) será el primer navegador importante compatible con WebRTC con PeerConnection:

Desde el 18 de enero de 2012, Chrome es compatible con WebRTC también. Se puede usar en el canal de desarrollo (Windows, OSX, Linux) y la compilación Canaria (Windows y OSX) por habilitándolo bajo chrome://flags. Solo soporta MediaStream como Video y audio y puede ser probado con varios Demos . Transferencia de datos de aplicaciones como String/ArrayBuffer/... no es compatible hasta ahora.

Desde el 16 de marzo de 2012, el Borrador del Editor de WebRTC separa una "API de Datos Peer-to-peer" para enviar y recibir datos genéricos de aplicaciones (String, ArrayBuffer y Blob). El cromo quiere implementar la API de datos pronto (10 de abril de 2012).

El 3 de abril, Mozilla publicó un primer ejemplo de trabajo en WebRTC para Firefox también.

DataChannel está previsto para la versión 25 de Chrome, detrás de una bandera, mientras tanto, se puede probar en Firefox Nightly / Aurora (12 de diciembre de 2012):

2018: Los canales de datos todavía son experimentales, pero están disponibles en versiones actuales de Chrome y Firefox:

 110
Author: Dennis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-03 15:18:08

Tendré que decepcionarte - esto actualmente no es posible con solo JavaScript. Websockets (y Socket.IO) permite una conexión tipo socket entre el cliente y el servidor, pero no entre los clientes. Su opción es un plugin-ya sea Flash, Silverlight, Java o por encargo.

Lo que puedes hacer es usar socket.io y emular eso escribiendo un servidor proxy simple.

 6
Author: Emil Ivanov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-08-11 07:38:12

Me gustaría dirigir su atención al hecho de que la mayoría de los usuarios de hoy en día están detrás de NAT o firewalls, y esto significa que no se puede establecer fácilmente la conexión entrante al ordenador del usuario. Por lo tanto, su idea (si es posible) solo funcionaría en algunos casos y aportaría complejidad adicional a su solución. Así sistema cliente-servidor con conexión posiblemente persistente (usando websockets o socket.io) es una mejor opción.

 2
Author: Eugene Mayevski 'Allied Bits,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-08-11 11:22:59