TCP からデータを取得し、そのデータにいくつかのロジックを適用するエコー サーバーに取り組んでいます。例えば、クライアントのデータがそのまま入ってきたら、 としてhello
応答したいhello from server
。
関数を使用して入力データを転送できますcopy
が、これは私の場合は役に立ちません。
私が取り組んでいる開始コードは次のとおりです。
extern crate futures;
extern crate tokio_core;
extern crate tokio_io;
use futures::stream::Stream;
use futures::Future;
use std::net::SocketAddr;
use tokio_core::net::TcpListener;
use tokio_core::reactor::Core;
use tokio_io::io::copy;
use tokio_io::AsyncRead;
fn main() {
let addr = "127.0.0.1:15000".parse::<SocketAddr>().unwrap();
let mut core = Core::new().unwrap();
let handle = core.handle();
let socket = TcpListener::bind(&addr, &handle).unwrap();
println!("Listening on: {}", addr);
let done = socket.incoming().for_each(move |(socket, addr)| {
let (reader, writer) = socket.split();
let amt = copy(reader, writer);
let msg = amt.then(move |result| {
match result {
Ok((amt, _, _)) => println!("wrote {} bytes to {}", amt, addr),
Err(e) => println!("error on {}: {}", addr, e),
}
Ok(())
});
handle.spawn(msg);
Ok(())
});
core.run(done).unwrap();
}
このコピー機能の代わりにいくつかのロジックを追加する必要があることはわかっていますが、どうすればよいでしょうか?
let amt = copy(reader, writer);