O HTML5 permitirá que os aplicativos da web façam conexões HTTP ponto a ponto?

100

É possível criar um aplicativo web que, com a ajuda de um servidor central, possa criar conexões diretas com outros usuários do mesmo aplicativo web? Estou imaginando um processo semelhante ao de perfuração UDP.

Eu li sobre a nova API WebSockets em HTML5, mas parece que você deve iniciar a conexão com um servidor compatível com WS antes que a conexão totalmente duplex possa começar. Estou pensando mais sobre um processo para fazer conexões diretas entre clientes, com um servidor se envolvendo apenas no handshake inicial.

NOTA: os miniaplicativos Java não contam. Estou interessado apenas em tecnologias de navegador padrão.

Peter O.
fonte

Respostas:

109

Em vez de suposições inteligentes, aqui está uma resposta informada:

O HTML 5 planeja permitir conexões ponto a ponto de javascript, mas essas conexões NÃO SERÃO TCP RAW.

A especificação completa pode ser encontrada em http://dev.w3.org/html5/websockets/

jrh

EDITAR: com referência específica a conexões ponto a ponto, verifique estes links:

É importante observar que os recursos ainda estão sendo negociados. Será bom poder criar aplicativos da web de "bate-papo local" :)

jrh

jrharshath
fonte
45
+1 => "Em vez de suposições inteligentes, aqui está uma resposta informada"
Ionuț G. Stan
2
O WebSocket permite a conexão com QUALQUER host? Acredito que a especificação diz apenas servidor.
hegemon
4
O Web Sockets não faz mais parte do HTML5, mas uma especificação independente.
Sergey Ilinsky
8
WebSockets não são ponto a ponto - eles ainda são cliente para servidor, e os navegadores não implementam a metade do servidor.
Alnitak
4
webSockets não fazem ponto a ponto, mas uma especificação mais recente, WebRTC, foi projetada para isso.
Eric Mill
29

ATUALIZAÇÃO 17/10/2012: Esta funcionalidade agora existe no Chrome Stable v22. Para usar essa funcionalidade no Chrome, é necessário habilitar dois sinalizadores em chrome: // flags:

  • Habilitar MediaStream
  • Habilitar PeerConnection

Em seguida, você pode visitar a página de demonstração AppRTC para experimentar a demonstração. Consulte a página WebRTC - Executando as Demonstrações para obter instruções mais detalhadas sobre como configurar o Chrome para usar a funcionalidade ponto a ponto e habilitar a captura de dispositivo.


ATUALIZAÇÃO: Os engenheiros da Ericcson Labs têm uma prova de conceito em um WebKit que faz vídeo de conversação ponto a ponto HTML5 .

Eles têm demonstrações em seu blog da tecnologia em ação, bem como diagramas e explicações sobre como a tecnologia funcionará.

Eles estão trabalhando para estabilizar e comprometer o repositório WebKit.

jmort253
fonte
Quanto tempo você estima que levará antes que isso chegue ao WebKit?
Alistair
Eu não sei. Eu sugiro verificar com Ericcson. O link está na minha resposta. Seus fóruns podem ter informações sobre quando isso acontecerá.
jmort253
Exigir configurações especiais por navegador / sinalizador não é o mesmo que fazer parte de uma especificação padrão da web em funcionamento. Se não estiver em HTML5, WebSockets ou WebRTC out-of-the-box, então você não pode fazer peer-to-peer sem hacks. Felizmente, parece que o WebRTC está indo na direção certa.
Beejor de
11

Sim, finalmente.

No momento em que este artigo foi escrito (2017), WebRTC agora é uma parte padrão da maioria dos navegadores modernos (cerca de 70% dos que estão em uso) e permite streaming de multimídia, ponto a ponto e perfuração.

Documentos, código de amostra e exemplos ao vivo para WebRTC podem ser encontrados em html5rocks.com .

De acordo com caniuse.com e html5rocks.com , os seguintes navegadores suportam WebRTC:

Suporte total: Edge 14, Firefox 22, Firefox Android 55
Suporte parcial: Android Browser 56, Chrome 20, Chrome Android 29, Edge 12, Firefox 17, Opera 18, Opera Android 20, Opera Mobile 12, UC Browser Android 11.4
Suporte futuro ( Q3 2017): Chrome para iOS 11, Safari 11 para iOS 11 e OS X 10.11
Sem suporte: IE, IE Mobile, Opera Mini

A taxa de saturação do WebRTC é limitada em dispositivos Apple, já que o Safari 11 ainda não foi lançado e requer iOS 11 ou OS X 10.11. Apesar de projetar a partir de tendências de atualização anteriores, WebRTC deve estar disponível em cerca de 75% dos dispositivos iOS em 2018 e 100% em 2020.

Beejor
fonte
4

Existem vários motivos pelos quais isso seria complicado:

  1. Firewalls (mesmo apenas NATs simples) tornariam esse tipo de conexão difícil em uma camada protocal muito mais baixa do que até mesmo HTTP. Com o meu chapéu de segurança de TI, esta parece ser uma maneira maravilhosa de abrir portas arbitrárias em uma máquina, apenas visitando um site da Web - e assim seria bloqueado agressivamente por praticamente todos os sistemas de TI corporativos.
  2. HTTP é inerentemente um protocolo cliente-servidor. Embora seja razoavelmente fácil simular comunicações duplex usando long polling (bem como algumas outras técnicas), não é particularmente eficiente.
  3. Isso abriria um grande buraco para ataques XSS.

O WebSockets foi projetado para resolver o segundo desses problemas, mas (deliberadamente, eu espero) os outros dois não. Quando eles falam sobre ponto a ponto nas especificações HTML5, eles estão falando sobre comunicações full duplex entre o servidor e o cliente, não entre um cliente e outro.

No entanto, seria simples implementar uma pilha de rede apropriada em cima de websockets - com a condição de que toda a comunicação ainda teria que ser feita através do servidor. Eu vi isso usando long polling (um amigo meu na Uni escreveu uma pilha TCP / IP completa usando long polling).

Jwoolard
fonte
P2P não é cliente-servidor; o primeiro move o tráfego entre pares, o último o move através do servidor para um ou mais clientes. O principal benefício do P2P é que um servidor pode atuar como um matchmaker enquanto o tráfego pesado vai entre os clientes (o que é uma vantagem para a privacidade e largura de banda).
Beejor
0

Segundo harshath.jr: você poderia muito bem ter um servidor agindo como um diretório (expondo as "origens" de cada agente conectado; origem sendo o esquema + host + porta como em draft-abarth-origin , com o esquema sendo "ws" ou "wss"). Você pode então iniciar conexões WebSocket ponto a ponto; o SOP sendo trabalhado graças ao CORS . Claro, isso significa que cada agente (ou seja, navegador) teria que incorporar seu próprio servidor WebSocket (à la Opera Unite).

Nesse meio tempo, faça isso do modo XMPP / IRC / etc.: sem conexão ponto a ponto, mas conexões WebSocket a um servidor central (ou rede!) Para passar mensagens para os agentes conectados (eventualmente usando algum WebSocket específico " subprotocol ")

EDITAR: observe que tudo isso está realmente fora do escopo do HTML5 (todas essas coisas já fizeram parte do HTML5, mas foram divididas em suas próprias especificações)

Thomas Broyer
fonte