UNIX Sockets
Last updated
Last updated
Para entender o que é um socket, vamos lembrar dos named pipes, que são arquivos FIFO compartilhados entre dois processos.
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.
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.