API SocketIO

SocketIO

 

O Socket.IO é uma biblioteca JavaScript para aplicações web em tempo real. Ele habilita comunicação bidirecional em tempo real entre clientes web e servidores. Possui duas partes: uma biblioteca do lado do cliente que roda no navegador e uma biblioteca do lado do servidor para Node.js. Ambos os componentes têm uma API quase idêntica. Como o Node.js, é orientado a eventos.

 

Messages Types

 

0: open (Enviado pelo servidor quando um novo transporte é aberto (recheck))

 

1: close (Solicita o fechamento deste transporte, mas não encerra a conexão em si.)

 

2: ping (Enviado pelo cliente. O servidor deve responder com um pacote pong contendo os mesmos dados)

exemplo

o cliente envia: 2probe

server sends: 3probe

 

3: pong (Enviado pelo servidor para responder a pacotes de ping.)

 

4: mensagem de string (mensagem real, cliente e servidor devem chamar seus callbacks com os dados.)

example:

42/chat,[“join”,”{room:1}"]

4 é o tipo de pacote de mensagem no protocolo engine.io

2 é o tipo EVENT no protocolo socket.io

/chat é o dado que é processado pelo socket.io

o socket.io disparará o evento “join”

passará os dados "room: 1". É possível omitir o namespace somente quando ele é /.

 

5: upgrade (Antes de o engine.io trocar de transporte, ele testa se o servidor e o cliente conseguem se comunicar por esse transporte. Se este teste for bem-sucedido, o cliente envia pacotes de upgrade que solicitam ao servidor que esvazie seu cache no transporte antigo e troque para o novo transporte.)

 

6: noop (Um pacote noop. Utilizado principalmente para forçar um ciclo de poll quando uma conexão WebSocket de entrada é recebida.)

 

Properties

API: especifica a versão do SocketIO:

 

ioAPI0: suporta servidores socket.io 0.* (selecionado por padrão)

 

ioAPI1: suporta servidores socket.io 1.*

 

ioAPI2: suporta servidores socket.io 2.*

 

ioAPI3: suporta servidores socket.io 3.*

 

ioAPI4: suporta servidores socket.io 4.*

 

Base64: se habilitado, as mensagens binárias são recebidas como base64.

 

HandShakeCustomURL: permite personalizar a URL para obter a sessão socket.io.

 

HandShakeTimestamp: habilite apenas se você quiser enviar timestamp como parâmetro quando uma nova sessão é solicitada (habilite esta propriedade se você tentar acessar um servidor python gevent-socketio).

 

HandShakeAuthToken: se o servidor exigir um token para autenticação, defina aqui o token de autenticação.

 

Namespace: permite definir um namespace ao conectar-se ao servidor.

 

Polling: desabilitando esta propriedade, o cliente se conectará diretamente ao servidor usando websocket como transporte.

 

Parameters: permite que você defina os parâmetros de conexão.

 

EncodeParameters: se habilitado, os parâmetros são codificados.

 

Métodos

Utilize o método WriteData para enviar mensagens ao servidor socket.io (seguindo a seção Message Types).

1. Chame o método "add user" com um parâmetro usando John como nome do usuário.


WriteData('42["add user", "John"]');

Eventos

OnHTTPRequest

Antes de uma nova conexão websocket ser estabelecida, o servidor socket.io exige que o cliente abra uma nova conexão HTTP para obter um novo id de sessão. Em alguns casos, o servidor socket.io exige autenticação usando cabeçalhos HTTP. Você pode usar este evento para adicionar cabeçalhos HTTP personalizados, como autorização Basic ou autenticação por token Bearer.

OnAfterConnect

Este evento é chamado após a conexão socket.io ser bem-sucedida e o cliente poder enviar mensagens ao servidor. Aqui você pode assinar namespaces, por exemplo.

OnHTTPConnectionSSL

Quando um servidor WebSocket requer conexões seguras, você pode obter uma mensagem de erro como esta quando um cliente tenta conectar ao servidor:

Error connecting with SSL. error:XXXXXXXX:SSL routines:ssl3_read_bytes:tlsv1 alert protocol version

Este erro significa que seu cliente está tentando se conectar usando uma versão do TLS que não é suportada pelo servidor.

Para resolver este erro, você deve tratar OnSSLAfterCreateHandler do componente cliente WebSocket e definir uma versão mais recente do TLS.

Por exemplo: aqui estamos definindo o TLS 1.2 como versão de protocolo.


procedure TfrmWebSocketClient.SOCKETIOHTTPConnectionSSL(Sender: TObject;
    aSSLHandler: TIdSSLIOHandlerSocketBase);
begin
  TIdSSLIOHandlerSocketOpenSSL(aSSLHandler).SSLOptions.Method := sslvTLSv1_2;
end;