{"id":16949668,"url":"https://github.com/tailhook/rotor","last_synced_at":"2025-04-12T22:36:01.648Z","repository":{"id":36325264,"uuid":"40629943","full_name":"tailhook/rotor","owner":"tailhook","description":"The mio-based framework for rust for doing I/O in simple and composable way (ABANDONED)","archived":false,"fork":false,"pushed_at":"2016-11-24T10:59:29.000Z","size":6798,"stargazers_count":360,"open_issues_count":3,"forks_count":25,"subscribers_count":23,"default_branch":"master","last_synced_at":"2024-10-14T21:55:44.502Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tailhook.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-08-12T23:54:38.000Z","updated_at":"2024-10-03T21:56:53.000Z","dependencies_parsed_at":"2022-07-29T21:09:56.928Z","dependency_job_id":null,"html_url":"https://github.com/tailhook/rotor","commit_stats":null,"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tailhook%2Frotor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tailhook%2Frotor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tailhook%2Frotor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tailhook%2Frotor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tailhook","download_url":"https://codeload.github.com/tailhook/rotor/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248642627,"owners_count":21138352,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-13T21:55:45.909Z","updated_at":"2025-04-12T22:36:01.619Z","avatar_url":"https://github.com/tailhook.png","language":"Rust","readme":"=====\nRotor\n=====\n\n:Status: Alpha\n:Examples: `TCP echo server`_, `TCP client (telnet)`_\n:Ecosystem: `libraries and apps using rotor`_\n:Documentation: http://tailhook.github.com/rotor/\n\n.. _TCP echo server: https://github.com/tailhook/rotor/blob/master/examples/tcp_echo_server.rs\n.. _TCP client (telnet): https://github.com/tailhook/rotor/blob/master/examples/telnet.rs\n.. _libraries and apps using rotor: http://rotor.readthedocs.org/en/latest/ecosystem.html\n\nThe mio-based framework for rust for doing I/O in simple and composable way.\n\nThe rotor core (this crate) basically consists of:\n\n* An event loop handler (in terms of mio) which turns mio event into\n  event to specific state machine\n* A Future type which allows communication between state machines in safe\n  and efficient way\n* A simple way to combine multiple libraries (e.g. multiple protocol handlers)\n  into single mio event loop\n\nAt the end of the day, rotor is the minimalistic core for making composable\nlibraries on top. It's less than 0.5KLoC.\n\nYou are expected to use some higher level abstraction most of the time.\nFor example, you should use stream abstraction (yet to be implemented) for\nmaking TCP protocol parser.\n\n\nResources\n=========\n\n**Both are rather historical at the moment**\n\n* `Asynchronous IO in Rust \u003chttps://medium.com/@paulcolomiets/asynchronous-io-in-rust-36b623e7b965\u003e`_\n  (random design notes about this library)\n* `Asynchronous IO in Rust (part II) \u003chttps://medium.com/@paulcolomiets/async-io-for-rust-part-ii-33b9a7274e67\u003e`_\n* `Async IO in Rust (part III) \u003chttps://medium.com/@paulcolomiets/async-io-in-rust-part-iii-cbfd10f17203\u003e`_\n\n\nBenchmarks\n==========\n\nThese benchmarks are based on **old version of** `this example`_. Hopefully\nwe will get updated benchmarks soon.\n\n.. _this example: https://github.com/tailhook/rotor-http/blob/master/examples/hello_world_server.rs\n\nJust few micro-benchmarks to show that framework has a decent peformance.\n\nThe performance on the few years old laptop (i7-3517U CPU @ 1.90GHz)::\n\n    \u003e wrk -t2 -c 400 http://localhost:8888/\n    Running 10s test @ http://localhost:8888/\n      2 threads and 400 connections\n      Thread Stats   Avg      Stdev     Max   +/- Stdev\n        Latency    11.19ms   18.03ms 627.44ms   99.54%\n        Req/Sec    19.66k     1.76k   21.93k    81.00%\n      391170 requests in 10.01s, 32.83MB read\n    Requests/sec:  39071.42\n    Transfer/sec:      3.28MB\n\nPerformance on newer desktop class CPU (i7-4790K CPU @ 4.00GHz)::\n\n    \u003e ./wrk -t 2 -c 400 http://127.0.0.1:8888\n    Running 10s test @ http://127.0.0.1:8888\n      2 threads and 400 connections\n      Thread Stats   Avg      Stdev     Max   +/- Stdev\n        Latency     2.24ms    1.56ms 126.94ms   99.91%\n        Req/Sec    91.35k     2.27k   93.76k    98.00%\n      1818133 requests in 10.00s, 152.58MB read\n    Requests/sec: 181781.96\n    Transfer/sec:     15.26MB\n\nNote: both benchmarks are run on **single threaded** server.\n\nThe benchmarks are too early (not a full implementation of HTTP), so no\ncomparison bencmarks listed here.\n\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftailhook%2Frotor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftailhook%2Frotor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftailhook%2Frotor/lists"}