SlideShare a Scribd company logo
1 of 24
TCP assíncrono usando
C++11 e Boost.Asio
Rodrigo Strauss :: www.1bit.com.br
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
Intelitrader
• Soluções para o mercado financeiro
– Roteamento de ordens
– Servidor de cotação
– Risco pre trade
BitForge
• “Especialistas em Software”
• Projetos tecnicamente complicados em geral
– Problemas de performance e escalabilidade
– Bugs intermitentes
– Dispositivos esquisitos e BUSes diferenciadas
• Experiência
– IPTV
– Automação bancária
– Segurança da Informação
– Industrial
– Embarcados
– Servidores TCP de alta performance
E vocês?
C++
O caminho do C++
• Linguagem
• STL
• Boost
STL
• Biblioteca padrão do C++
• Containers
• Iterators
• Algoritmos
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
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
boost::asio
• Biblioteca de networking no boost
• Simples, poderosa, multiplataforma e
assíncrona
• TCP/IP
• Boa documentação, como quase tudo no
Boost
Pré-Pós-Requsitos
• http://google.com/search?q=%s
• http://en.wikipedia.org/wiki/%s
• Amazon
TCP/IP
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
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)
TCP
• Uma conexão é estabelecida
• Garante ordem, entrega, integridade
Cebolão
Socket
• A tradução literal é “soquete”
• Fluxo de dados indo e vindo (full duplex)
• E é isso
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
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.
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
Servidor TCP assíncrono
You win. Flawless victory. Fatality.
Perguntas?
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

More Related Content

Similar to TCP Assíncrono usando C++11 e Boost Asio

Apostilas modelo cliente servidor
Apostilas   modelo cliente servidorApostilas   modelo cliente servidor
Apostilas modelo cliente servidor
Daniel Silveira
 
Unidade1ainternet 110928173442-phpapp02
Unidade1ainternet 110928173442-phpapp02Unidade1ainternet 110928173442-phpapp02
Unidade1ainternet 110928173442-phpapp02
DP7
 
Mini-Curso de Sockets no Unipê
Mini-Curso de Sockets no UnipêMini-Curso de Sockets no Unipê
Mini-Curso de Sockets no Unipê
Elenilson Vieira
 
I Pv4 Final 2
I Pv4 Final 2I Pv4 Final 2
I Pv4 Final 2
ptic433
 

Similar to TCP Assíncrono usando C++11 e Boost Asio (20)

Apostilas modelo cliente servidor
Apostilas   modelo cliente servidorApostilas   modelo cliente servidor
Apostilas modelo cliente servidor
 
Unidade1ainternet 110928173442-phpapp02
Unidade1ainternet 110928173442-phpapp02Unidade1ainternet 110928173442-phpapp02
Unidade1ainternet 110928173442-phpapp02
 
funcionamento da internet
funcionamento da internetfuncionamento da internet
funcionamento da internet
 
Mini-Curso de Sockets no Unipê
Mini-Curso de Sockets no UnipêMini-Curso de Sockets no Unipê
Mini-Curso de Sockets no Unipê
 
Camada de aplicação parte1
Camada de aplicação parte1Camada de aplicação parte1
Camada de aplicação parte1
 
ASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis PaulinoASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis Paulino
 
Desenvolvemos para web?
Desenvolvemos para web?Desenvolvemos para web?
Desenvolvemos para web?
 
O que projetos de IoT precisam ?
O que projetos de IoT precisam ?O que projetos de IoT precisam ?
O que projetos de IoT precisam ?
 
Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...
Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...
Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...
 
Lista 03 respostas
Lista 03 respostasLista 03 respostas
Lista 03 respostas
 
Como funciona a Internet
Como funciona a InternetComo funciona a Internet
Como funciona a Internet
 
Samba, Squid, FTP, DHCP1
Samba, Squid, FTP, DHCP1Samba, Squid, FTP, DHCP1
Samba, Squid, FTP, DHCP1
 
Cap 02.pdf
Cap 02.pdfCap 02.pdf
Cap 02.pdf
 
Conhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkConhecendo o Novo REST Framework
Conhecendo o Novo REST Framework
 
Intro_redes.pdf
Intro_redes.pdfIntro_redes.pdf
Intro_redes.pdf
 
Redes de computador
Redes de computadorRedes de computador
Redes de computador
 
I Pv4 Final 2
I Pv4 Final 2I Pv4 Final 2
I Pv4 Final 2
 
Modelo tcpip
Modelo tcpipModelo tcpip
Modelo tcpip
 
Aula 1
Aula 1Aula 1
Aula 1
 
Datacenter na nuvem
Datacenter na nuvemDatacenter na nuvem
Datacenter na nuvem
 

TCP Assíncrono usando C++11 e Boost Asio

  • 1. TCP assíncrono usando C++11 e Boost.Asio Rodrigo Strauss :: www.1bit.com.br
  • 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
  • 3. Intelitrader • Soluções para o mercado financeiro – Roteamento de ordens – Servidor de cotação – Risco pre trade
  • 4. BitForge • “Especialistas em Software” • Projetos tecnicamente complicados em geral – Problemas de performance e escalabilidade – Bugs intermitentes – Dispositivos esquisitos e BUSes diferenciadas • Experiência – IPTV – Automação bancária – Segurança da Informação – Industrial – Embarcados – Servidores TCP de alta performance
  • 6. C++
  • 7. O caminho do C++ • Linguagem • STL • Boost
  • 8. STL • Biblioteca padrão do C++ • Containers • Iterators • Algoritmos
  • 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
  • 23. You win. Flawless victory. Fatality. Perguntas?
  • 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