dyer is designed for reliable, flexible and fast Request-Response based service, including data processing, web-crawling and so on, providing some friendly, flexible, comprehensive features without compromising speed.
dyer provides some high-level features:
- asynchronous, lock-free, concurrent streaming and I/O, make the best of thread pool, network, and system resource.
- Event-driven, once you set the initials and recursive generator,
dyerwill handle the rest of it.
- User-friendly and flexible,
dyeroffers high-level, easy to use wrappers and APIs what does a lot for you.
dyer-cli is a handy tool for your easy and fast use of dyer, and recommanded to intergrate
cargomust be installed,
- OpenSSL library is required to compile openssl-sys(if not installed, see here)
the following code helps you get the tool:
cargo install dyer-cli
Once installed, run
dyer in your terminal or cmd prompt, it prints some info like
Handy tool for dyer
then dyer-cli is successfully installed.
Dyer-cli generates a template that contains many useful instances and instructions when using dyer with following code:
dyer new myproject
It will create a project called
myproject and the files layout displays:
|___Cargo.toml |___Readme.md |___data/ |___data/tasks/ |___src/ |___src/affix.rs |___src/entity.rs |___src/parser.rs |___src/actor.rs |___src/middleware.rs |___src/pipeline.rs
Main functionality of each file:
affix.rsserves as an actor to adjust and satisfy additional requirement
entity.rscontains entities/data structure to be used/collected
parser.rscontains functions that extract entities from response
actor.rscontains initial when opening and final things to do when closing
middleware.rscontains Some middlewares that process data at runtime
pipeline.rscontains entities manipulation including data-storage, displsying and so on
lib.rsexports all modules inside the directory, just do nothing here normally
Cargo.tomlis the basic configuration of the project
README.mdcontains some instructions of the project
data/place to store/load files of
Appwhen load-balancing and backup
Then it is your show time, basically there are simple example items(
in each file you can follow. After that check your code
if you run it the first time, dyer-cli will download the crates and then check the code.
if some warning happens such as
unused import or
dead code the command does a lot for you:
A wraper of
cargo fix, if some warning happens such as
unused import or
dead code the command does a lot for you. However it won’t help if some errors occur, if so, you have to debug the code manually.
dyer.cfg file in the root directory
the file contains some configurations of
ArgApp that will update periodically, for more details see
When the program compiles, haha run it:
Short as it seems, here represents the normal procedure to write your program. It is believed that learning by example is the best, and some examples are provided to illustrate how to use.
- Dyer-cli Command-Line Tool Support
- Interrupt and Resume Support
- Lock-free WorkFlow
- Multiple Actors, MiddleWares, PipeLines
- More to go
It is, of course, probable that bugs and errors lie in somewhere, and defects may appear in an unexpected way, if you got any one, comments and suggestions are welcome, please new a issue in my github.
Contains some data structure that related to the content of HTTP
A structure that carries basic meta-data, including its origin, stime stamp, privilege, encoding and so on.
A lightweight logging facade.
This module contains structs related to HTTP requests, notably the Request type itself as well as a builder to create requests. Typically you’ll import the http::Request type rather than reaching into this module itself.
HTTP response types.
This module contains structs related to HTTP requests,
some utilities that useful and convenience for dealing with data flow.
generally, it provide extra infomation , meta data required by server,
Accept-Encoding and so on.
An abstraction and collection of data flow
To control the workflow of engine in dealing with Affix including using affix or not, the amount to use/generate
some infomation about
dyer at rumtime where speed and error-handler based on
A reference counted contiguous slice of memory.
basic meta data related 3 ranging
Meta Data of the Request
Meta Data of the Response
Meta Data of the Task
the parsed result returned by
Task consists of a head and a potentially optional body. The body component is
generic, enabling arbitrary types to represent the HTTP body. For example, the body could be
A vector of tuple which contians function name(&str) and function pointer (*const ()),
Although it starts a project, the work to do here is not very complicated it is as simple as setting up initial condition and other basic things.
Read bytes from a buffer.