<?xml version="1.0" encoding="UTF-8" ?><!-- generator=Zoho Sites --><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><atom:link href="https://www.uktech.com.br/bloguk/tag/rust-flatbuffers-e-zeromq/feed" rel="self" type="application/rss+xml"/><title>UKTech - Blog UKTech #Rust, Flatbuffers e ZeroMQ</title><description>UKTech - Blog UKTech #Rust, Flatbuffers e ZeroMQ</description><link>https://www.uktech.com.br/bloguk/tag/rust-flatbuffers-e-zeromq</link><lastBuildDate>Thu, 07 May 2026 09:41:21 -0700</lastBuildDate><generator>http://zoho.com/sites/</generator><item><title><![CDATA[Serialização de dados utilizando Rust, Flatbuffers e ZeroMQ]]></title><link>https://www.uktech.com.br/bloguk/post/serialização-de-dados-utilizando-rust-flatbuffers-e-zeromq</link><description><![CDATA[<img align="left" hspace="5" src="https://www.uktech.com.br/Untitled -8--1.png"/>Utilizamos o processo de serialização, transformaremos o formato de uma mensagem em outra.]]></description><content:encoded><![CDATA[<div class="zpcontent-container blogpost-container "><div data-element-id="elm_4ZqJLG_hS625MnE7z8S0tw" data-element-type="section" class="zpsection "><style type="text/css"></style><div class="zpcontainer-fluid zpcontainer"><div data-element-id="elm_nPTYkZnG8qTSJay1srLN4Q" data-element-type="row" class="zprow zprow-container zpalign-items-flex-start zpjustify-content-flex-start zpdefault-section zpdefault-section-bg " data-equal-column=""><style type="text/css"> [data-element-id="elm_nPTYkZnG8qTSJay1srLN4Q"].zprow{ border-radius:1px; } </style><div data-element-id="elm_SdzvQHdzEbj52gDRx2nGGA" data-element-type="column" class="zpelem-col zpcol-12 zpcol-md-12 zpcol-sm-12 zpalign-self- zpdefault-section zpdefault-section-bg "><style type="text/css"> [data-element-id="elm_SdzvQHdzEbj52gDRx2nGGA"].zpelem-col{ border-radius:1px; } </style><div data-element-id="elm_O1UN10hYkEqgoLLhbs7RLg" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_O1UN10hYkEqgoLLhbs7RLg"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><div style="color:inherit;"><p>A troca de mensagens no formato JSON é o método mais comum de comunicação dentro de um sistema, entretanto não é o mais performático, para obter uma melhor performance é necessário otimizar o tamanho das mensagens, para isso utilizamos o processo de serialização, transformando o formato de uma mensagem em outro.</p><p><br></p><p>Existem diversas bibliotecas de serialização, sendo a Flatbuffers uma das mais performáticas. O presente artigo tem como objetivo discorrer sobre algumas funcionalidades dessa biblioteca e mostrar como utilizá-la.</p></div></div>
</div><div data-element-id="elm_NB1irJYyYFR-074_MnLXrA" data-element-type="heading" class="zpelement zpelem-heading "><style> [data-element-id="elm_NB1irJYyYFR-074_MnLXrA"].zpelem-heading { border-radius:1px; } </style><h2
 class="zpheading zpheading-style-none zpheading-align-left " data-editor="true"><span style="color:inherit;"><span style="font-size:20px;">Por que utilizar Flatbuffers para comunicação ?</span>&nbsp;</span><br></h2></div>
<div data-element-id="elm_qhG7B4rqnzDvoc_cdzql4w" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_qhG7B4rqnzDvoc_cdzql4w"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><div style="color:inherit;"><ul><li>Baixo consumo de recursos, não necessita de espaço adicional para acessar os dados serializados;</li><li>Flexível, permite retrocompatibilidade entre versões diferentes dos esquemas de serielização;</li><li>Fácil de usar;</li><li>Fortemente tipada;</li><li>Crossplatform, o compilador FlatC permite permite a utilização de Flatbuffers na maioria das linguagens;</li></ul></div></div>
</div><div data-element-id="elm_W9iWzfndk8Z0KbDqNwQj6g" data-element-type="heading" class="zpelement zpelem-heading "><style> [data-element-id="elm_W9iWzfndk8Z0KbDqNwQj6g"].zpelem-heading { border-radius:1px; } </style><h2
 class="zpheading zpheading-style-none zpheading-align-left " data-editor="true"><div style="color:inherit;"><h3><span style="font-size:20px;">Por onde começar ?</span></h3></div></h2></div>
<div data-element-id="elm_gH4JxwyKHe9gDKPOOvXKZA" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_gH4JxwyKHe9gDKPOOvXKZA"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><p><span style="color:inherit;">Instalando o transpilador FlatC, responsável por traduzir os <span style="font-style:italic;">schemas</span> das mensagens em código, muitas distribuições linux trazem o pacote flatbuffers e flatbuffers-devel, para outros casos consulte é necessário compilar a partir do<a href="https://github.com/google/flatbuffers/releases/tag/v23.5.26"> código fonte</a>.</span><br></p></div>
</div><div data-element-id="elm_pPeQPGr0FVOe18hpMASMiQ" data-element-type="heading" class="zpelement zpelem-heading "><style> [data-element-id="elm_pPeQPGr0FVOe18hpMASMiQ"].zpelem-heading { border-radius:1px; } </style><h2
 class="zpheading zpheading-style-none zpheading-align-left " data-editor="true"><div style="color:inherit;"><h3><span style="font-size:20px;">Definindo um esquema</span></h3></div></h2></div>
<div data-element-id="elm_oJ2vbauMhK1ImOn2JFPIzw" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_oJ2vbauMhK1ImOn2JFPIzw"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><p>Vamos definir um esquema básico de comunicação seguindo a <a href="https://flatbuffers.dev/flatbuffers_guide_writing_schema.html" title="documentação:" target="_blank" rel="">documentação:</a></p></div>
</div><div data-element-id="elm_UOU1Q09nv28WrC4VCCHBVA" data-element-type="codeSnippet" class="zpelement zpelem-codesnippet "><div class="zpsnippet-container"><script src="https://gist.github.com/MatheusReichert/be273fd4624640e7765baf9dd153197e.js"></script></div>
</div><div data-element-id="elm_c2S5JiNZhN7HRcsNislI_A" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_c2S5JiNZhN7HRcsNislI_A"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><div style="color:inherit;"><p>No esquema acima temos uma mensagem Base que é composta por uma id, um nome e um dispositivo. Utilizando a declaração <em>union</em> podemos utilizar diferentes dispositivos em um campo da mensagem. Essa union se comporta como uma tupla, tendo como valor na posição 0 o campo oculto None permitindo que a mensagem seja enviada sem um dispositivo.</p><p><br></p><p>Agora basta compilar o arquivo .fbs criado utilizando o comando:</p></div></div>
</div><div data-element-id="elm_4Lm3sJrpiaRxrW9qjr0Y9w" data-element-type="codeSnippet" class="zpelement zpelem-codesnippet "><div class="zpsnippet-container"> flatc --rust nome-do-arquivo.fbs </div>
</div><div data-element-id="elm_LIEstI7Kbjs3jF5u_ibxxg" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_LIEstI7Kbjs3jF5u_ibxxg"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><div style="color:inherit;"><p>E adicionar o arquivo <a href="http://generated.rs">generated.rs</a> ao projeto.</p><h3></h3></div></div>
</div><div data-element-id="elm_l4qyW-7LYuzAiqllfkEokA" data-element-type="heading" class="zpelement zpelem-heading "><style> [data-element-id="elm_l4qyW-7LYuzAiqllfkEokA"].zpelem-heading { border-radius:1px; } </style><h2
 class="zpheading zpheading-style-none zpheading-align-left " data-editor="true"><span style="font-size:20px;">Exe<span style="font-size:20px;">mplo</span></span><span style="font-size:20px;">:</span></h2></div>
<div data-element-id="elm_TBkfuUGmbISvedyRB1mH4Q" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_TBkfuUGmbISvedyRB1mH4Q"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><div style="color:inherit;"><div>Para exemplo vamos utilizar a biblioteca de comunicação zeromq em uma arquitetura cliente-servidor simples, considerando o projeto já com as dependências segue o código do servidor:</div></div></div>
</div><div data-element-id="elm_YtSDuckU0jMap5H0a4Rrog" data-element-type="codeSnippet" class="zpelement zpelem-codesnippet "><div class="zpsnippet-container"><script src="https://gist.github.com/MatheusReichert/39a408c220a302b9a3491b4834c861b8.js"></script></div>
</div><div data-element-id="elm_QlnrDaenK5_1Vl_i1enClg" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_QlnrDaenK5_1Vl_i1enClg"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><div style="color:inherit;"><div>E do cliente:&nbsp;</div></div></div>
</div><div data-element-id="elm_wMF48ShAHu7auuKYX1kTiQ" data-element-type="codeSnippet" class="zpelement zpelem-codesnippet "><div class="zpsnippet-container"><script src="https://gist.github.com/MatheusReichert/1f8bbed091c87bdf73b2ed2bb6ff797d.js"></script></div>
</div><div data-element-id="elm_UrOMWNblTVXvE0IVTbQOmg" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_UrOMWNblTVXvE0IVTbQOmg"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><p><span style="color:inherit;">Resultado:</span><br></p></div>
</div><div data-element-id="elm_jv0d-DD4sLRO76QSsluVIA" data-element-type="image" class="zpelement zpelem-image "><style> @media (min-width: 992px) { [data-element-id="elm_jv0d-DD4sLRO76QSsluVIA"] .zpimage-container figure img { width: 1110px ; height: 494.18px ; } } @media (max-width: 991px) and (min-width: 768px) { [data-element-id="elm_jv0d-DD4sLRO76QSsluVIA"] .zpimage-container figure img { width:723px ; height:321.89px ; } } @media (max-width: 767px) { [data-element-id="elm_jv0d-DD4sLRO76QSsluVIA"] .zpimage-container figure img { width:415px ; height:184.76px ; } } [data-element-id="elm_jv0d-DD4sLRO76QSsluVIA"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="size-fit" data-size-mobile="size-fit" data-align="center" data-tablet-image-separate="true" data-mobile-image-separate="true" class="zpimage-container zpimage-align-center zpimage-size-fit zpimage-tablet-size-fit zpimage-mobile-size-fit hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><source class="mobile-image-source" media="(max-width: 767.8px)" srcset="/Untitled%20-8--1.png"><source class="tablet-image-source" media="(max-width: 991.8px) and (min-width: 768px)" srcset="/Untitled%20-8--1.png"><img class="zpimage zpimage-style-none zpimage-space-none " src="/Untitled%20-8--1.png" width="415" height="184.76" loading="lazy" size="fit" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm_kzJqJvJ5dQd4VpYJF-VZ1A" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_kzJqJvJ5dQd4VpYJF-VZ1A"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><div style="color:inherit;"><h3><span style="font-size:16px;">Código fonte disponível em:</span></h3><p><a href="https://github.com/uktechbr/artigo-rust-flatbuffer">https://github.com/uktechbr/artigo-rust-flatbuffer</a></p></div></div>
</div></div></div></div></div></div> ]]></content:encoded><pubDate>Wed, 22 Nov 2023 16:35:45 -0300</pubDate></item></channel></rss>