Chronos - An efficient library for asynchronous programming
https://status-im.github.io/nim-chronos/
0d050d5823
* Add automatic constructors for TCP and UDP transports. * Add port number argument. Add some documentation comments. Fix tests. * Make datagram test use request/response scheme. * Add helper. * Fix issue with non-zero port setups. Add test. * Fix tests to probe ports. * Attempt to fix MacOS issue. * Add Opt[IpAddress]. Make IPv4 mapping to IPv6 space automatic. * Add tests. * Add stream capabilities. * Fix Linux issues. * Make getTransportFlags() available for all OSes. * Fix one more compilation issue. * Workaround weird compiler bug. * Fix forgotten typed version of constructor. * Make single source for addresses calculation. * Add one more check into tests. * Fix flags not being set in transport constructor. * Fix post-rebase issues with flags not being set. * Address review comments. |
||
---|---|---|
.github/workflows | ||
chronos | ||
docs | ||
tests | ||
.gitignore | ||
LICENSE-APACHEv2 | ||
LICENSE-MIT | ||
README.md | ||
chronos.nim | ||
chronos.nimble | ||
config.nims | ||
nim.cfg |
README.md
Chronos - An efficient library for asynchronous programming
Introduction
Chronos is an efficient async/await framework for Nim. Features include:
- Asynchronous socket and process I/O
- HTTP server with SSL/TLS support out of the box (no OpenSSL needed)
- Synchronization primitivies like queues, events and locks
- Cancellation
- Efficient dispatch pipeline with excellent multi-platform support
- Exceptional error handling features, including
raises
tracking
Getting started
Install chronos
using nimble
:
nimble install chronos
or add a dependency to your .nimble
file:
requires "chronos"
and start using it:
import chronos/apps/http/httpclient
proc retrievePage(uri: string): Future[string] {.async.} =
# Create a new HTTP session
let httpSession = HttpSessionRef.new()
try:
# Fetch page contents
let resp = await httpSession.fetch(parseUri(uri))
# Convert response to a string, assuming its encoding matches the terminal!
bytesToString(resp.data)
finally: # Close the session
await noCancel(httpSession.closeWait())
echo waitFor retrievePage(
"https://raw.githubusercontent.com/status-im/nim-chronos/master/README.md")
Documentation
See the user guide.
Projects using chronos
- libp2p - Peer-to-Peer networking stack implemented in many languages
- presto - REST API framework
- Scorper - Web framework
- 2DeFi - Decentralised file system
- websock - WebSocket library with lots of features
chronos
is available in the Nim Playground
Submit a PR to add yours!
TODO
- Multithreading Stream/Datagram servers
Contributing
When submitting pull requests, please add test cases for any new features or fixes and make sure nimble test
is still able to execute the entire test suite successfully.
chronos
follows the Status Nim Style Guide.
License
Licensed and distributed under either of
- MIT license: LICENSE-MIT or http://opensource.org/licenses/MIT
or
- Apache License, Version 2.0, (LICENSE-APACHEv2 or http://www.apache.org/licenses/LICENSE-2.0)
at your option. These files may not be copied, modified, or distributed except according to those terms.