Code Monkey home page Code Monkey logo

mycrypto-sse's Introduction

Introdução

SSE (Server Sent Events) é uma tecnologia que nos permite "ficar pendurado" em um servidor Http recebendo dados continuamente.

Diferente do Websocket, o SSE permite apenas o consumo de dados pelo cliente, não sendo possível enviar nenhuma informação para o servidor. Em resumo, o Websocket tem comunicação bi-direcional (cliente <-> server) e o SSE unidirecional (Server -> Client).

Esse tipo de tecnologia é muito útil em cenários onde precisamos ter atualizações em tempo real de dados (Que é o caso que esse exemplo se propõe a mostrar). Pelo fato de ser uma via de mão única, acaba sendo mais performático do que o Websocket em muitos casos.

Mais informações em:

Sobre o Repositório

MyCrypto-SSE

Exemplo de aplicação que utiliza SSE simulando um consumo em "real time" dos valores de crypto moedas.

Reforço aqui que esse projeto serve única e exclusivamente para estudos. Colocar um projeto SSE em produção não é tão trivial, principalmente no que diz respeito a escalabilidade. Produção é vida real, e todos nós sabemos que 'O mundo é diferente da ponte pra cá'....

MyCrypto.Backend

Web API que expõe stream de dados via SSE com informações fakes sobre preços de crypto moedas.

Note que, todas as informações de valores são criadas aleatoriamente.

Esse exemplo simula de maneira bem simplória um consumo de dados de um serviço de data stream como o Kafka.

Para esse exemplo, o consumo das informações é indiferente, mas no mundo real, isso impactaria a forma de escalar a sua aplicação. O foco aqui não é entrar nesse mérito.

Para efeito de testes, o CORS nesse Web Api está sendo ignorado. Nunca faça isso sem entender profundamente como essa feature funciona.

MyCrypto.Playground

Console Application que consome os dados do Web API. Serve apenas para demonstrar como consumir dados de SSE usando o HttpClient.

MyCrypto.Site

Exemplo de consumo do Web API usando JS. É um site simples com apenas dois arquivos, index.html e sse.js. Não sou (e nem pretendo ser) especialista em JS.

Utilizei a primeira lib que encontrei no Github para esse fim: https://github.com/mpetazzoni/sse.js. Funcionou de primeira. Achei bem simples de usar :)

Para rodar o site eu usei o dotnet-serve, que é uma ferramenta bem legal para subir um servidor HTTP por linha de comando de forma simples e rápida. É o tipo de coisa que facilita muito o dia-a-dia.

Nesse link https://github.com/natemcmaster/dotnet-serve é possível ter todas as informações para instalação e uso da ferramenta.

Considere apoiar o desenvolvedor desse projeto ❤️

Após instalar o dotnet-serve já é possível rodar o projeto. Para isso execute os seguintes comandos:

Para inicar o Backend:

cd MyCrypto-SSE/src/MyCrypto.Backend 
dotnet run

Para inicar o Playground:

cd MyCrypto-SSE/src/MyCrypto.Playground 
dotnet run

Para inicar o Site:

cd MyCrypto-SSE/src/MyCrypto.Site 
dotnet serve -o -S -p 51234
# -o faz com que o navegador seja aberto
# -S roda o site usando https
# -p indica a porta onde a aplicação vai rodar

Agradecimentos especiais ao Tiago Aguiar pela ajuda com a parte de front-end. 💕

mycrypto-sse's People

Contributors

angelobelchior avatar

Stargazers

Lyncoln Mauricio avatar  avatar Janduy Monroe avatar Pedro Henrique avatar Wilson Santos avatar Jerson Brito avatar Fábio Henrique Gabriele avatar Leonardo Cardoso de Almeida avatar Mario Meyrelles avatar Tiago Aguiar avatar mschen_ avatar  avatar Alexandre Sanlim avatar Pedro Jesus avatar Nathaly Mesquita avatar

Watchers

James Cloos avatar  avatar

Forkers

fabioh

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.