Socket.IO - Internals

Neste capítulo, discutiremos sobre fallbacks, conexão usando Socket.IO, eventos e mensagens.

Fallbacks

O Socket.IO possui muitos mecanismos de transporte subjacentes, que lidam com várias restrições decorrentes de problemas entre navegadores, implementações do WebSocket, firewalls, bloqueio de portas etc.

Embora o W3C tenha uma especificação definida para a API WebSocket, ainda está faltando na implementação. O Socket.IO fornece mecanismos de fallback, que podem lidar com esses problemas. Se desenvolvermos aplicativos usando a API nativa, precisaremos implementar os fallbacks. O Socket.IO cobre uma grande lista de fallbacks na seguinte ordem -

  • WebSockets
  • FlashSocket
  • Sondagens longas XHR
  • Transmissão multipartes XHR
  • Sondagem XHR
  • Sondagem JSONP
  • iframes

Conexão usando Socket.IO

A conexão Socket.IO começa com o aperto de mão. Isso faz do handshake uma parte especial do protocolo. Além do aperto de mão, todos os outros eventos e mensagens no protocolo são transferidos pelo soquete.

O Socket.IO deve ser usado com aplicativos da Web e, portanto, supõe-se que esses aplicativos sempre possam usar HTTP. É por esse motivo que o handshake Socket.IO ocorre sobre HTTP usando uma solicitação POST no URI do handshake (passado ao método de conexão).

Eventos e mensagens

A API nativa do WebSocket envia apenas mensagens. O Socket.IO fornece uma camada adicional sobre essas mensagens, o que nos permite criar eventos e, novamente, nos ajuda a desenvolver aplicativos facilmente, separando os diferentes tipos de mensagens enviadas.

A API nativa envia mensagens apenas em texto sem formatação. Isso também é resolvido pelo Socket.IO. Ele lida com a serialização e desserialização de dados para nós.

Temos uma API cliente oficial para a web. Para outros clientes, como telefones celulares nativos, outros clientes de aplicativos também podemos usar o Socket.IO usando as etapas a seguir.

Etapa 1 - Uma conexão precisa ser estabelecida usando o mesmo protocolo de conexão discutido acima.

Etapa 2 - As mensagens precisam estar no mesmo formato especificado pelo Socket.IO. Esse formato permite que o Socket.IO determine o tipo da mensagem e os dados enviados na mensagem e alguns metadados úteis para a operação.

O formato da mensagem é -

[type] : [id ('+')] : [endpoint] (: [data]

Os parâmetros no comando acima são explicados abaixo -

  • Tipo é um número inteiro de um dígito, especificando que tipo de mensagem é.

  • ID é ID da mensagem, um número inteiro incremental usado para confirmações.

  • O ponto final é o ponto final do soquete ao qual a mensagem deve ser entregue ...

  • Dados são os dados associados a serem entregues no soquete. No caso de mensagens, é tratado como texto sem formatação; para outros eventos, é tratado como JSON.

No próximo capítulo, escreveremos um aplicativo de bate-papo no Socket.IO.