A Peer-to-Peer networking library built on top of QUIC.
This project is available under the terms of either the Apache 2.0 license or the MIT license.
This project forked from bmwill/anemo
License: Apache License 2.0
A Peer-to-Peer networking library built on top of QUIC.
This project is available under the terms of either the Apache 2.0 license or the MIT license.
We need access to an anemo::Network
within RPC handler functions so they can send their own outbound RPCs as part of serving requests.
Like curl but for anemo
Features that would be nice:
For error responses, some nice to haves:
Status
to do stuff with error data in code)Would aid clarity to not have two functions that do the same thing, unless there's an idiomatic reason for this?
This should have the same interface as any regular RPC send, just treating the time it takes for anemo to connect to the peer the same way as any other kind of latency.
Otherwise every client that needs reliable send (or not really reliable, but more like, "keep trying until explicitly told to give up") will have to reimplement essentially the same logic on the application side.
There should be a conventional way to create a mock RPC server for unit testing.
anemo (or some sui middleware) should have support for request limiting.
Ideally on a per-method, per-peer level we could set limits for request rate and max number of concurrent inflight requests. (Would be ideal if these were modifiable while program is running, to respond to byzantine nodes by deprioritizing.)
A udp socket that is bound to an ipv4 address cannot trivially communicate with an ipv6 address. Despite this we should probably make a better effort when bound to an ipv4 address by:
It's possible to use tokio timeout but this leads to unwieldy types containing numerous nested Result
s. I think default and per-RPC timeouts should be a native feature of the code generated RPC services in anemo. Timeout should be a supported error type within anemo::rpc::Status
. Bonus if we also make client propagate its timeout to server so that the server can behave accordingly (eg fail-fast, or use it to set appropriate timeouts on Child RPCs).
It should be possible to constrain which peers anemo will allow to connect or send certain RPCs.
In order to stop using a random reset key 3bcbd2c used the ed25519 private key as a seed to an rng in order to generate a 64 byte long reset key. This may not be cryptographically safe and should instead be replaced with an HKDF.
This may not be cryptographically safe. Consider using an audited HKDF, as done e.g. in https://www.rfc-editor.org/rfc/rfc9001.html#initial-secrets.
Global timeout on both client and server side should be a default but not an override. Should be configurable on a per-method basis to a different value, or no timeout at all.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.