supernova alternatives and similar packages
Based on the "network" category.
Alternatively, view supernova alternatives based on common mentions on social networks and blogs.
-
compendium-client
Mu (μ) is a purely functional framework for building micro services. -
resolv
Domain Name Service (DNS) lookup via the libresolv standard library routines -
network-data
Network data structures in Haskell (IP, UDP, TCP headers, etc) -
windns
Domain Name Service (DNS) lookup via the Windows dnsapi standard library -
network-uri-json
FromJSON and ToJSON Instances for Network.URI -
hatexmpp3
XMPP client with synthetic filesystem (9P) and (optional) graphical (GTK3) interfaces -
LDAPv3
Lightweight Directory Access Protocol V3 (LDAPv3) RFC4511 implementation -
hsendxmpp
sendxmpp clone and drop-in replacement, sending XMPP messages via CLI -
transient-universe-tls
Secure communications for transient-universe -
oauth2-jwt-bearer
OAuth2 jwt-bearer client flow as per rfc7523. -
iwlib
A binding to the iw library for getting info about the current WiFi connection. -
attoparsec-uri
A compositional URI parser / printer for attoparsec -
network-uri-lenses
lenses for http://hackage.haskell.org/package/network-uri -
network-simple-wss
Simple Haskell interface to TLS secured WebSockets
Access the most powerful time series database as a service
Do you think we are missing an alternative of supernova or a related project?
README
supernova
⚠️ it is still very much under development 🚧 so use it at your own risk ⚠️
A supernova is a powerful and luminous stellar explosion. This transient astronomical event occurs during the last evolutionary stages of a massive star or when a white dwarf is triggered into runaway nuclear fusion. The original object, called the progenitor, either collapses to a neutron star or black hole, or is completely destroyed. The peak optical luminosity of a supernova can be comparable to that of an entire galaxy before fading over several weeks or months.
Quick Start
The example located in test/Main.hs
showcases a consumer & producer running concurrently (needs the async
library).
main :: IO ()
main = runPulsar conn $ do
c <- newConsumer topic sub
p <- newProducer topic
liftIO $ program c p
conn :: PulsarConnection
conn = connect defaultConnectData
topic :: Topic
topic = defaultTopic "app"
sub :: Subscription
sub = Subscription Exclusive "test-sub"
program :: Consumer IO -> Producer IO -> IO ()
program Consumer {..} Producer {..} =
let c = fetch >>= \(Message i m) -> msgDecoder m >> ack i >> c
p = sleep 3 >> traverse_ send messages >> p
in concurrently_ c p
A Message
contains a MessageID
you need for ack
ing and a payload defined as a lazy ByteString
.
Note that we wait a few seconds before publishing a message to make sure the consumer is already subscribed. Otherwise, it might miss some messages.
Run it with the following command:
cabal new-run supernova-tests
By default, it logs to the standard output in DEBUG level. You can change it by suppling LogOptions
to the alternative function runPulsar'
.
runPulsar' :: LogOptions -> PulsarConnection -> Pulsar a -> IO ()
Streaming
Since both consumers and producers operate on any MonadIO m
, we could leverage some streaming libraries. Here's the same example using streamly.
import Streamly
import qualified Streamly.Prelude as S
program :: Consumer IO -> Producer IO -> IO ()
program Consumer {..} Producer {..} =
let c = fetch >>= \(Message i m) -> msgDecoder m >> ack i >> c
p = sleep 3 >> traverse_ send messages >> p
in S.drain . asyncly . maxThreads 10 $ S.yieldM c <> S.yieldM p
Development
It is recommended to use Cachix to reduce the compilation time.
nix-build
Or within a Nix shell (run nix-shell
at the project's root).
cabal new-build
Generate Hackage tarball
cabal new-sdist
Upload documentation
cabal new-haddock --haddock-for-hackage --enable-doc
cabal upload -d dist-newstyle/supernova-0.0.2-docs.tar.gz --publish