Web socket - Trazendo soquetes para a web

31
WebSocket Trazendo soquetes para a web

Transcript of Web socket - Trazendo soquetes para a web

Page 1: Web socket - Trazendo soquetes para a web

WebSocketTrazendo soquetes para a web

Page 2: Web socket - Trazendo soquetes para a web

Jackson VeronezeSoftware Developer

[email protected]://jacksonveroneze.comhttps://br.linkedin.com/in/jacksonveroneze

Autores

Mario MendonçaSoftware Developer

[email protected]://br.linkedin.com/in/mario-mendonca

Page 3: Web socket - Trazendo soquetes para a web

O que são Sockets de rede e WebSockets?

WebSockets e Sockets são ambos protocolos de comunicação entre cliente e servidor.

Embora possuam certas semelhanças (além do nome), são especificações distintas para finalidades também diferentes.

Page 4: Web socket - Trazendo soquetes para a web

Sockets

O protocolo Socket é usado para comunicação entre processos através da rede.

Transmite dados em formato binário.Para a comunicação na rede, ele opera sobre algum protocolo TCP

ou UDP para abstrair as complexidades inerentes do meio de transmissão.

Cada Socket conecta-se a uma porta específica. Sockets são soluções genéricas, geralmente usados para

comunicação de alto desempenho entre diferentes plataformas.

Page 5: Web socket - Trazendo soquetes para a web

WebSockets

O protocolo WebSocket, por sua vez, possui a finalidade muito mais específica de ser implementado em navegadores web para comunicação persistente do código JavaScript com o servidor web, comunicando-se geralmente através da porta 80 e sempre sobre o protocolo TCP.

O formato do protocolo é em texto e o handshake que inicia a comunicação é muito parecido com o HTTP, assim servidores web podem facilmente servir HTTP e WebSockets na mesma porta.

Page 6: Web socket - Trazendo soquetes para a web

O que é o Handshake?

Handshake é uma espécie de autorização que o cliente, ao solicitar uma conexão com Servidor WebSocket, envia ao Servidor e por sua vez valida essa autorização. Também é utilizado em vários protocolos da web como: FTP, TCP, HTTP, etc.

Page 7: Web socket - Trazendo soquetes para a web

O que é WebSocket?

A web tem sido construída com base no conhecido paradigma de solicitação/resposta de HTTP.

Um cliente carrega uma página da web e, em seguida, nada acontece até que o usuário clique na próxima página.

Por volta de 2005, o AJAX começou a deixar a web mais dinâmica. Mesmo assim, toda a comunicação HTTP era direcionada pelo

cliente, o que exigia interação do usuário ou sondagem periódica para carregar novos dados do servidor.

Page 8: Web socket - Trazendo soquetes para a web

O que é WebSocket?

Web Sockets são um full-duplex, conexão persistente bi-direcional de um navegador web para um servidor.

Depois que uma conexão socket é estabelecida a conexão permanece aberta até que o cliente ou servidor decide encerrar.

Page 9: Web socket - Trazendo soquetes para a web

O que é WebSocket?

Ao contrário do que o nome indica, o protocolo WebSocket não é apenas sobre a web!

A especificação foi implementada a partir dos sistemas operacionais móveis e tablets, incluindo iOS, Android e Windows.

Isso significa que podemos usar o poder e a velocidade do protocolo WebSocket em um aplicativo de smartphone nativamente.

Os princípios fundamentais permanecem, independentemente de usarmos JavaScript, ou linguagens de programação.

Page 10: Web socket - Trazendo soquetes para a web

Especificação WebSocket

A especificação WebSocket define uma API que estabelece conexões de "soquete" entre um navegador da web e um servidor.

Em outras palavras, há uma conexão persistente entre o cliente e o servidor e ambas as partes podem começar a enviar dados a qualquer momento.

Page 11: Web socket - Trazendo soquetes para a web

Fluxo de uma conexão HTTP

Page 12: Web socket - Trazendo soquetes para a web

Fluxo de uma conexão WebSocket

Page 13: Web socket - Trazendo soquetes para a web

Estabelecendo uma conexão - Request

Page 14: Web socket - Trazendo soquetes para a web

Estabelecendo uma conexão - Response

Page 15: Web socket - Trazendo soquetes para a web

Connection handshake

Temos aqui um "connection handshake". Ou seja, uma comunicação breve entre o cliente e servidor indicando que há suporte para transações com WebSocket.

Não será possível operações com WebSocket a menos que haja um retorno "101"

Page 16: Web socket - Trazendo soquetes para a web

O header Upgrade

Toda conexão Websocket começa uma requisição HTTP. Essa requisição é como qualquer outra, exceto por conter um

cabeçalho diferente: Upgrade. Ele indica que o cliente deseja atualizar a conexão para outro

protocolo. Nesse caso, Websocket.

Page 17: Web socket - Trazendo soquetes para a web

Cabeçalhos na requisição do Handshake

No connection handshake são obrigatórios, na requisição, os seguintes cabeçalhos:

1.Upgrade - indicando o protocolo que estamos querendo adotar;2.Connection3.Sec-Websocket-Key - Trata-se de uma chave, com 16 bytes, e em

base 64 que será utilizada para atestar a validade da "atualização" oferecida pelo servidor e impedir ataques "cross protocol"

4.Sec-Websocket-Version

Page 18: Web socket - Trazendo soquetes para a web

Cabeçalhos na resposta do Handshake

São obrigatórios na resposta os seguintes cabeçalhos:

1.Upgrade

2.Connection

3.Sec-Websocket-Accept - É o retorno que o servidor dá, e o cliente utiliza, para confirmar que o servidor entende o protocolo websocket.

Page 19: Web socket - Trazendo soquetes para a web

Data Frame

Page 20: Web socket - Trazendo soquetes para a web

NAVEGADORES

Page 21: Web socket - Trazendo soquetes para a web

Verificar suporte

Page 22: Web socket - Trazendo soquetes para a web

Casos de uso

Use o WebSocket sempre que precisar de uma conexão quase em tempo real de baixa latência entre o cliente e o servidor. Alguns exemplos de casos de uso:

Jogos on-line de vários jogadores

Aplicativos de chat

Links para esportes ao vivo

Atualização em tempo real de redes sociais

Page 23: Web socket - Trazendo soquetes para a web

Abrir conexão

ws:. Conexões inseguras, idem ao http:

wss: Para uma conexão WebSocket segura e, do mesmo modo que https:, é usado para conexões HTTP seguras.

Page 24: Web socket - Trazendo soquetes para a web

Eventos

A associação imediata de alguns manipuladores de eventos à conexão permite identificar quando a conexão está aberta, quando há mensagens recebidas ou quando há um erro.

onopen

onerror

onmessage

onclose

Page 25: Web socket - Trazendo soquetes para a web

onopen

Uma vez que tivermos a conexão estabelecida, o evento open() será disparado para a nossa instância WebSocket.

Page 26: Web socket - Trazendo soquetes para a web

onerror

Também podemos recuperar erros que possam ocorrer no decorrer de um Listener (escuta) que parta de um evento error.

Page 27: Web socket - Trazendo soquetes para a web

onmessage

Quando uma mensagem é recebida o evento mensagem é disparado.

Este evento inclui uma propriedade chamada de data que poderá ser usada para acessar o conteúdo da mensagem.

Page 28: Web socket - Trazendo soquetes para a web

onclose

Após termos finalizado a utilização do nosso WebSocket, o que precisamos fazer é encerrar a nossa.

Após a nossa conexão ter sido fechada, o navegador irá disparar um evento close.

Page 29: Web socket - Trazendo soquetes para a web

Enviando mensagens

Os Websockets, podemos realizar o envio de tanto de textos como dados binários.

Page 30: Web socket - Trazendo soquetes para a web

Demos

http://www.websocket.org/echo.html

Page 31: Web socket - Trazendo soquetes para a web

Referências

https://leonardorifeli.com/development/2016/05/29/socket-no-php.html

https://www.html5rocks.com/pt/tutorials/websockets/basics/

http://www.devmedia.com.br/uso-de-websockets-e-html5/32267

http://pt.stackoverflow.com/questions/46839/o-que-s%C3%A3o-sockets-de-rede-e-websockets