Giter VIP home page Giter VIP logo

anemo's Introduction

anemo

Documentation (main) License License

A Peer-to-Peer networking library built on top of QUIC.

License

This project is available under the terms of either the Apache 2.0 license or the MIT license.

anemo's People

Contributors

akichidis avatar arun-koshy avatar aschran avatar bmwill avatar jnaulty avatar longbowlu avatar mwtian avatar mystenmark avatar rex4539 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

anemo's Issues

FR: anemo command line tool

Like curl but for anemo

Features that would be nice:

  • craft and send arbitrary requests to any anemo endpoint (needs to support whatever kind of admin keys or credentials would be required for this to be safe)
  • query for list of available services and methods

FR: more detailed errors

For error responses, some nice to haves:

  • machine-usable errors (i.e. I can include my custom Error object in response and then extract it from the Status to do stuff with error data in code)
  • more complete list of HTTP status codes

Implement support for sending RPC to known but disconnected peer

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.

FR: Add support for request rate and inflight limiting

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.)

improve handling of dns resolution and ipv6 address when bound to an ipv4 socket

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:

  • looking at all addresses from the dns resolution process and find a suitable address (instead of always grabbing the first)
  • attempting to convert an ipv6 address to an ipv4 mapped address when possible.

Implement native support for RPC timeouts

It's possible to use tokio timeout but this leads to unwieldy types containing numerous nested Results. 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).

FR: Timeout configs with more granularity

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.

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.