Palestra apresentada no 12º Encontro de Programadores C e C++, realizado no Rio de Janeiro no dia 15 de Agosto de 2015.
Vídeo da apresentação em https://youtu.be/JjANXR-diTM?t=18382
2. Eu, eu e eu
• Mantenho o site www.1bit.com.br, onde escrevo sobre
C++
• Co-Fundador do grupo C & C++ Brasil e owner da lista
• Microsoft MVP em Visual C++
• Sócio Programador da Intelitrader e da BitForge
• Server side
• Uso C++ porque resolve meus problemas, uso bastante
Python também
• mercado financeiro segurança da informação mercado financeiro segurança da
informação .NET segurança da informação mercado financeiro
• Windows ou Linux? Eu fico com os dois, porque ainda
não estudei BSD ou OSX
9. Boost
• Conjuntos de bibliotecas portáveis para C++
• Multiplataforma e multicompiladores
• Científica e prática, tem pra todos
• Bibliotecas em vários domínios
10. Algumas bibliotecas
• Tokenizer
• Interprocess
• Math (matrizes e outros
• Date Time)
• Memory (smart_ptr,
pool)
• State Machines
• Program Options
• Asio (comunicação via
TCP/IP
• filesystem
• Containers
• lexical_cast
• string, regex
• GIL
• Property Map
11. boost::asio
• Biblioteca de networking no boost
• Simples, poderosa, multiplataforma e
assíncrona
• TCP/IP
• Boa documentação, como quase tudo no
Boost
14. IP
• Pacote pra lá, pacote pra cá
• Mande e reze
• Cuida basicamente dos endereços e da
fragmentação
• Não garante quase nada
– Não garante entrega
– Não garante ordem ou “não-duplicidade”
– Não garante integridade dos dados
15. UDP
• Pacote pra lá, pacote pra cá
• Mande e reze
• Introduz o conceito de portas
• Não garante entrega nem ordem, mas garante
integridade dos dados (se eles chegarem)
16. TCP
• Uma conexão é estabelecida
• Garante ordem, entrega, integridade
18. Socket
• A tradução literal é “soquete”
• Fluxo de dados indo e vindo (full duplex)
• E é isso
19. Como planejar um servidor
• TCP ou UDP?
• Quantos clientes?
• Latência ou thoughput?
• Protocolo
– Request/Response?
– Assinaturas
– Binário
• E os cabeçalhos?
– Texto
• Qual o separadors
20. Patterns comuns para protocolos
• Baseado em texto, com separador
– O separador é geralmente rn
– Exemplo: HTTP
• Binário, com o tamanho especificado em um
header
– Exemplo: TCP, UDP
• Em todos os casos É NECESSÁRIO ACUMULAR OS
DADOS QUE CHEGAM.
• Você pode até saber que vai receber 1000 bytes. Seu
cliente pode enviar 1 de cada vez.
21. Estratégias para servidores
• Síncrono
– Um processo/task por cliente (fork)
– Uma thread por cliente
• Assíncrono
– Uma thread trata todo mundo
– Thread pool, cliente com afinidade
– Thread pool, sem afinidade
24. UDP vs TCP
• UDP, por não dar muitas garantias, é mais rápido
• Exemplos de uso
– UDP
• DNS
• VoIP
• Streaming
– TCP
• HTTP
• FTP
• Quase todo o resto