feat(transport): support streamable http server (#152)

* feat(transport): support streamable http server

* refactor(transport): add common module for shared transport utilities

* perf(tracing): add more log for streamable http session

* fix(test): fix port conflict in test with js

* fix(transport): fix id generating and session management

1. cancel when deleting
2. use `wrapping` and `saturating` correctly

* chore(naming): rename sse server to streamable http server
This commit is contained in:
4t145 2025-05-08 13:57:51 +08:00 • committed by GitHub
commit 57e14c56e8
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -48,10 +48,11 @@ tower-service = { version = "0.3", optional = true }
# for ws transport
# tokio-tungstenite ={ version = "0.26", optional = true }
# for sse-server transport
# for http-server transport
axum = { version = "0.8", features = [], optional = true }
rand = { version = "0.9", optional = true }
tokio-stream = { version = "0.1", optional = true }
uuid = { version = "1", features = ["v4"], optional = true }
# macro
rmcp-macros = { version = "0.1", workspace = true, optional = true }
@ -72,6 +73,16 @@ transport-sse-server = [
"dep:axum",
"dep:rand",
"dep:tokio-stream",
"uuid",
]
transport-streamable-http-server = [
"transport-streamable-http-server-session",
"dep:axum",
"uuid",
]
transport-streamable-http-server-session = [
"transport-async-rw",
"dep:tokio-stream",
]
# transport-ws = ["transport-io", "dep:tokio-tungstenite"]
tower = ["dep:tower-service"]
@ -102,7 +113,7 @@ path = "tests/test_with_python.rs"
[[test]]
name = "test_with_js"
required-features = ["server", "client", "transport-sse-server", "transport-child-process"]
required-features = ["server", "client", "transport-sse-server", "transport-child-process", "transport-streamable-http-server"]
path = "tests/test_with_js.rs"
[[test]]