Browse Source

optimize may-minihttp to enable reuse port (#4915)

* optimize may-minihttp to enable reuse port

* update rust stable version to 1.36
Xudong Huang 6 years ago
parent
commit
2977c211d4

+ 5 - 1
frameworks/Rust/may-minihttp/Cargo.toml

@@ -8,5 +8,9 @@ num_cpus = "1.0"
 serde = { version = "1.0", features = ["derive"] }
 serde = { version = "1.0", features = ["derive"] }
 serde_derive = "1.0"
 serde_derive = "1.0"
 serde_json = "1.0"
 serde_json = "1.0"
-may = { git = "https://github.com/Xudong-Huang/may" }
+may = "0.3"
 may_minihttp = { git = "https://github.com/Xudong-Huang/may_minihttp.git" }
 may_minihttp = { git = "https://github.com/Xudong-Huang/may_minihttp.git" }
+
+[profile.release]
+lto = true
+codegen-units = 1

+ 1 - 1
frameworks/Rust/may-minihttp/may-minihttp.dockerfile

@@ -1,4 +1,4 @@
-FROM rust:1.32.0
+FROM rust:1.36
 
 
 ADD ./ /may
 ADD ./ /may
 WORKDIR /may
 WORKDIR /may

+ 20 - 7
frameworks/Rust/may-minihttp/src/main.rs

@@ -2,11 +2,11 @@ extern crate may;
 extern crate num_cpus;
 extern crate num_cpus;
 #[macro_use]
 #[macro_use]
 extern crate serde_derive;
 extern crate serde_derive;
-extern crate serde_json;
 extern crate may_minihttp;
 extern crate may_minihttp;
+extern crate serde_json;
 
 
-use std::io;
 use may_minihttp::{HttpServer, HttpService, Request, Response};
 use may_minihttp::{HttpServer, HttpService, Request, Response};
+use std::io;
 
 
 #[derive(Serialize)]
 #[derive(Serialize)]
 struct Message<'a> {
 struct Message<'a> {
@@ -23,8 +23,10 @@ impl HttpService for Techempower {
         match req.path() {
         match req.path() {
             "/json" => {
             "/json" => {
                 resp.header("Content-Type", "application/json");
                 resp.header("Content-Type", "application/json");
-                *resp.body_mut() =
-                    serde_json::to_vec(&Message { message: "Hello, World!" }).unwrap();
+                *resp.body_mut() = serde_json::to_vec(&Message {
+                    message: "Hello, World!",
+                })
+                .unwrap();
             }
             }
             "/plaintext" => {
             "/plaintext" => {
                 resp.header("Content-Type", "text/plain")
                 resp.header("Content-Type", "text/plain")
@@ -40,7 +42,18 @@ impl HttpService for Techempower {
 }
 }
 
 
 fn main() {
 fn main() {
-    may::config().set_io_workers(num_cpus::get());
-    let server = HttpServer(Techempower).start("0.0.0.0:8080").unwrap();
-    server.join().unwrap();
+    may::config()
+        .set_io_workers(num_cpus::get())
+        .set_pool_capacity(20000)
+        .set_stack_size(0x800);
+
+    let mut servers = Vec::new();
+    for _ in 0..num_cpus::get() {
+        let server = HttpServer(Techempower).start("0.0.0.0:8080").unwrap();
+        servers.push(server);
+    }
+
+    for server in servers {
+        server.join().unwrap();
+    }
 }
 }