UNIX Sockets
Para entender o que é um socket, vamos lembrar dos named pipes, que são arquivos FIFO compartilhados entre dois processos.
Named pipes são uni-direcionais
Um processo reader fica bloqueado na fila até que alguma mensagem de outro processo writer seja escrita no pipe.
Como podemos ver no exemplo, named pipes são a princípio uni-direcionais, ou seja, a informação caminha em apenas uma direção. No nosso caso, do writer para o reader, e não o contrário.
Para que a comunicação seja bi-direcional, ou seja, que caminhe em ambas direções, temos de criar 2 named pipes.
Vamos simular uma comunicação request-response, numa arquitetura também conhecida como cliente-servidor:
Note acima que a informação caminha do client para o server, através do pipe req
, e do server para o client através do pipe res
. Este tipo de comunicação é bi-direcional, ou full-duplex.
E se, ao invés de pipes, pudéssemos utilizar uma estrutura nativa do sistema operacional, que faça uso de file descriptors, garanta comunicação full-duplex e possua diversas formas de envio de mensagens?
Sim, estamos falando de sockets.
UNIX Sockets
Sockets são estruturas de networking para comunicação full-duplex entre dois processos distintos (IPC). Para este guia, vamos focar em socket utilizado em ambientes UNIX-like, mais especificamente Ubuntu.
Começamos por instalar um pacote chamado netcat
, que permite manipular sockets do sistema operacional:
A API de UNIX sockets é bastante versátil e permite enviar diferentes tipos de mensagens para diferentes tipos de propósitos.
Portanto, nas próximas seções iremos explorar os principais tipos de sockets e suas diferenças.
Last updated