refactor: provide http server as tower service (#228)
* refactor: streamable http server as tower service
This commit is contained in:
parent
915bc3fb37
commit
209be7bdb8
1 changed files with 1828 additions and 1180 deletions
35
examples/servers/src/counter_hyper_streamable_http.rs
Normal file
35
examples/servers/src/counter_hyper_streamable_http.rs
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
mod common;
|
||||
use common::counter::Counter;
|
||||
use hyper_util::{
|
||||
rt::{TokioExecutor, TokioIo},
|
||||
server::conn::auto::Builder,
|
||||
service::TowerToHyperService,
|
||||
};
|
||||
use rmcp::transport::streamable_http_server::{
|
||||
StreamableHttpService, session::local::LocalSessionManager,
|
||||
};
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() -> anyhow::Result<()> {
|
||||
let service = TowerToHyperService::new(StreamableHttpService::new(
|
||||
Counter::new,
|
||||
LocalSessionManager::default().into(),
|
||||
Default::default(),
|
||||
));
|
||||
let listener = tokio::net::TcpListener::bind("[::1]:8080").await?;
|
||||
loop {
|
||||
let io = tokio::select! {
|
||||
_ = tokio::signal::ctrl_c() => break,
|
||||
accept = listener.accept() => {
|
||||
TokioIo::new(accept?.0)
|
||||
}
|
||||
};
|
||||
let service = service.clone();
|
||||
tokio::spawn(async move {
|
||||
let _result = Builder::new(TokioExecutor::default())
|
||||
.serve_connection(io, service)
|
||||
.await;
|
||||
});
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
Loading…
Reference in a new issue