Skip to content
This repository was archived by the owner on Oct 30, 2019. It is now read-only.

Commit a1b7576

Browse files
authored
Try for each concurrent (#24)
* use try-for-each-concurrent Signed-off-by: Yoshua Wuyts <[email protected]> * move proxy example over Signed-off-by: Yoshua Wuyts <[email protected]> * fmt and guessing Signed-off-by: Yoshua Wuyts <[email protected]> * improve upper bound Signed-off-by: Yoshua Wuyts <[email protected]>
1 parent 4e027e2 commit a1b7576

File tree

3 files changed

+38
-34
lines changed

3 files changed

+38
-34
lines changed

examples/guessing.rs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,9 +61,12 @@ async fn main() -> Result<(), failure::Error> {
6161
let mut listener = TcpListener::bind("127.0.0.1:8080")?;
6262
println!("Listening on {}", &listener.local_addr()?);
6363

64-
let mut incoming = listener.incoming();
65-
while let Some(stream) = incoming.next().await {
66-
runtime::spawn(play(stream?)).await?;
67-
}
64+
let incoming = listener.incoming().map_err(|e| e.into());
65+
incoming
66+
.try_for_each_concurrent(None, async move |stream| {
67+
runtime::spawn(play(stream)).await?;
68+
Ok::<(), failure::Error>(())
69+
})
70+
.await?;
6871
Ok(())
6972
}

examples/tcp-echo.rs

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,17 +14,18 @@ async fn main() -> std::io::Result<()> {
1414
println!("Listening on {}", listener.local_addr()?);
1515

1616
// accept connections and process them in parallel
17-
let mut incoming = listener.incoming();
18-
while let Some(stream) = incoming.next().await {
19-
runtime::spawn(async move {
20-
let stream = stream?;
21-
println!("Accepting from: {}", stream.peer_addr()?);
17+
listener
18+
.incoming()
19+
.try_for_each_concurrent(None, async move |stream| {
20+
runtime::spawn(async move {
21+
println!("Accepting from: {}", stream.peer_addr()?);
2222

23-
let (reader, writer) = &mut stream.split();
24-
reader.copy_into(writer).await?;
25-
Ok::<(), std::io::Error>(())
23+
let (reader, writer) = &mut stream.split();
24+
reader.copy_into(writer).await?;
25+
Ok::<(), std::io::Error>(())
26+
})
27+
.await
2628
})
2729
.await?;
28-
}
2930
Ok(())
3031
}

examples/tcp-proxy.rs

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -11,28 +11,28 @@ async fn main() -> std::io::Result<()> {
1111
let mut listener = TcpListener::bind("127.0.0.1:8081")?;
1212
println!("Listening on {}", listener.local_addr()?);
1313

14-
// accept connections and process them serially
15-
let mut incoming = listener.incoming();
16-
while let Some(client) = incoming.next().await {
17-
let handle = runtime::spawn(async move {
18-
let client = client?;
19-
let server = TcpStream::connect("127.0.0.1:8080").await?;
20-
println!(
21-
"Proxying {} to {}",
22-
client.peer_addr()?,
23-
server.peer_addr()?
24-
);
14+
// accept connections and process them in parallel
15+
listener
16+
.incoming()
17+
.try_for_each_concurrent(None, async move |client| {
18+
runtime::spawn(async move {
19+
let server = TcpStream::connect("127.0.0.1:8080").await?;
20+
println!(
21+
"Proxying {} to {}",
22+
client.peer_addr()?,
23+
server.peer_addr()?
24+
);
2525

26-
let (cr, cw) = &mut client.split();
27-
let (sr, sw) = &mut server.split();
28-
let a = cr.copy_into(sw);
29-
let b = sr.copy_into(cw);
30-
try_join!(a, b)?;
26+
let (cr, cw) = &mut client.split();
27+
let (sr, sw) = &mut server.split();
28+
let a = cr.copy_into(sw);
29+
let b = sr.copy_into(cw);
30+
try_join!(a, b)?;
3131

32-
Ok::<(), std::io::Error>(())
33-
});
34-
35-
handle.await?;
36-
}
32+
Ok::<(), std::io::Error>(())
33+
})
34+
.await
35+
})
36+
.await?;
3737
Ok(())
3838
}

0 commit comments

Comments
 (0)