1
1
#[ global_allocator]
2
2
static GLOBAL : snmalloc_rs:: SnMalloc = snmalloc_rs:: SnMalloc ;
3
-
4
3
use std:: { future:: Future , io, pin:: Pin , task:: Context , task:: Poll } ;
5
4
6
- use ntex:: { fn_service, http:: h1, io:: Io , util:: BufMut , util:: PoolId } ;
7
-
5
+ use ntex:: { fn_service, http:: h1, io:: Io , util:: ready, util:: BufMut , util:: PoolId } ;
8
6
mod utils;
9
7
10
8
#[ cfg( target_os = "macos" ) ]
@@ -33,54 +31,41 @@ impl Future for App {
33
31
34
32
fn poll ( mut self : Pin < & mut Self > , cx : & mut Context < ' _ > ) -> Poll < Self :: Output > {
35
33
let this = self . as_mut ( ) . get_mut ( ) ;
36
- if this. io . is_closed ( ) {
37
- return Poll :: Ready ( Ok ( ( ) ) ) ;
38
- }
39
-
40
- let read = this. io . read ( ) ;
41
- let write = this. io . write ( ) ;
42
34
loop {
43
- match read. decode ( & this. codec ) {
44
- Ok ( Some ( ( req, _) ) ) => {
45
- let _ = write. with_buf ( |buf| {
46
- // make sure we've got room
47
- let remaining = buf. remaining_mut ( ) ;
48
- if remaining < 1024 {
49
- buf. reserve ( 65535 - remaining) ;
50
- }
35
+ if let Some ( Ok ( ( req, _) ) ) = ready ! ( this. io. poll_read_next( & this. codec, cx) ) {
36
+ let _ = this. io . with_write_buf ( |buf| {
37
+ // make sure we've got room
38
+ let remaining = buf. remaining_mut ( ) ;
39
+ if remaining < 1024 {
40
+ buf. reserve ( 65535 - remaining) ;
41
+ }
51
42
52
- match req. path ( ) {
53
- "/json" => {
54
- buf. extend_from_slice ( JSON ) ;
55
- this. codec . set_date_header ( buf) ;
56
- let _ = simd_json:: to_writer (
57
- crate :: utils:: Writer ( buf) ,
58
- & Message {
59
- message : "Hello, World!" ,
60
- } ,
61
- ) ;
62
- }
63
- "/plaintext" => {
64
- buf. extend_from_slice ( PLAIN ) ;
65
- this. codec . set_date_header ( buf) ;
66
- buf. extend_from_slice ( BODY ) ;
67
- }
68
- _ => {
69
- buf. extend_from_slice ( HTTPNFOUND ) ;
70
- buf. extend_from_slice ( HDR_SERVER ) ;
71
- }
43
+ match req. path ( ) {
44
+ "/json" => {
45
+ buf. extend_from_slice ( JSON ) ;
46
+ this. codec . set_date_header ( buf) ;
47
+ let _ = simd_json:: to_writer (
48
+ crate :: utils:: Writer ( buf) ,
49
+ & Message {
50
+ message : "Hello, World!" ,
51
+ } ,
52
+ ) ;
53
+ }
54
+ "/plaintext" => {
55
+ buf. extend_from_slice ( PLAIN ) ;
56
+ this. codec . set_date_header ( buf) ;
57
+ buf. extend_from_slice ( BODY ) ;
58
+ }
59
+ _ => {
60
+ buf. extend_from_slice ( HTTPNFOUND ) ;
61
+ buf. extend_from_slice ( HDR_SERVER ) ;
72
62
}
73
- } ) ;
74
- }
75
- Ok ( None ) => break ,
76
- _ => {
77
- this. io . close ( ) ;
78
- return Poll :: Ready ( Err ( ( ) ) ) ;
79
- }
63
+ }
64
+ } ) ;
65
+ } else {
66
+ return Poll :: Ready ( Ok ( ( ) ) ) ;
80
67
}
81
68
}
82
- let _ = read. poll_read_ready ( cx) ;
83
- Poll :: Pending
84
69
}
85
70
}
86
71
@@ -91,7 +76,8 @@ async fn main() -> io::Result<()> {
91
76
// start http server
92
77
ntex:: server:: build ( )
93
78
. backlog ( 1024 )
94
- . bind ( "techempower" , "0.0.0.0:8080" , || {
79
+ . bind ( "techempower" , "0.0.0.0:8080" , |cfg| {
80
+ cfg. memory_pool ( PoolId :: P1 ) ;
95
81
PoolId :: P1 . set_read_params ( 65535 , 8192 ) ;
96
82
PoolId :: P1 . set_write_params ( 65535 , 8192 ) ;
97
83
@@ -100,7 +86,6 @@ async fn main() -> io::Result<()> {
100
86
codec : h1:: Codec :: default ( ) ,
101
87
} )
102
88
} ) ?
103
- . memory_pool ( "techempower" , PoolId :: P1 )
104
- . start ( )
89
+ . run ( )
105
90
. await
106
91
}
0 commit comments