SlideShare uma empresa Scribd logo
1 de 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

Mais conteúdo relacionado

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

Apostilas modelo cliente servidor
Apostilas   modelo cliente servidorApostilas   modelo cliente servidor
Apostilas modelo cliente servidorDaniel Silveira
 
Unidade1ainternet 110928173442-phpapp02
Unidade1ainternet 110928173442-phpapp02Unidade1ainternet 110928173442-phpapp02
Unidade1ainternet 110928173442-phpapp02DP7
 
funcionamento da internet
funcionamento da internetfuncionamento da internet
funcionamento da internetMarco Pinheiro
 
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
 
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 PaulinoComunidade NetPonto
 
Desenvolvemos para web?
Desenvolvemos para web?Desenvolvemos para web?
Desenvolvemos para web?Luis Vendrame
 
O que projetos de IoT precisam ?
O que projetos de IoT precisam ?O que projetos de IoT precisam ?
O que projetos de IoT precisam ?Alvaro Viebrantz
 
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...Renato Groff
 
Lista 03 respostas
Lista 03 respostasLista 03 respostas
Lista 03 respostasForça Tauá
 
Samba, Squid, FTP, DHCP1
Samba, Squid, FTP, DHCP1Samba, Squid, FTP, DHCP1
Samba, Squid, FTP, DHCP1SoftD Abreu
 
Conhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkConhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkMario Guedes
 
I Pv4 Final 2
I Pv4 Final 2I Pv4 Final 2
I Pv4 Final 2ptic433
 
Datacenter na nuvem
Datacenter na nuvemDatacenter na nuvem
Datacenter na nuvemIgnacio Nin
 

Semelhante a 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