pub struct ProxyHandler { /* private fields */ }Expand description
A proxy handler that forwards requests to a client based on the server’s capabilities 使用 ArcSwap 实现后端热替换,支持断开时立即返回错误
Implementations§
Source§impl ProxyHandler
impl ProxyHandler
Sourcepub fn new_disconnected(
mcp_id: String,
tool_filter: ToolFilter,
default_info: ServerInfo,
) -> Self
pub fn new_disconnected( mcp_id: String, tool_filter: ToolFilter, default_info: ServerInfo, ) -> Self
创建断开状态的 handler(用于初始化) 后续通过 swap_backend() 注入实际的后端连接
pub fn new(client: RunningService<RoleClient, ClientInfo>) -> Self
pub fn with_mcp_id( client: RunningService<RoleClient, ClientInfo>, mcp_id: String, ) -> Self
Sourcepub fn with_tool_filter(
client: RunningService<RoleClient, ClientInfo>,
mcp_id: String,
tool_filter: ToolFilter,
) -> Self
pub fn with_tool_filter( client: RunningService<RoleClient, ClientInfo>, mcp_id: String, tool_filter: ToolFilter, ) -> Self
创建带工具过滤器的 ProxyHandler(带初始后端连接)
Sourcepub fn swap_backend(
&self,
new_client: Option<RunningService<RoleClient, ClientInfo>>,
)
pub fn swap_backend( &self, new_client: Option<RunningService<RoleClient, ClientInfo>>, )
原子性替换后端连接
- Some(client): 设置新的后端连接
- None: 标记后端断开
Sourcepub fn is_backend_available(&self) -> bool
pub fn is_backend_available(&self) -> bool
检查后端是否可用(快速检查,不发送请求)
Sourcepub async fn is_mcp_server_ready(&self) -> bool
pub async fn is_mcp_server_ready(&self) -> bool
检查 mcp 服务是否正常(异步版本,会发送验证请求)
Sourcepub fn is_terminated(&self) -> bool
pub fn is_terminated(&self) -> bool
检查后端连接是否已关闭(同步版本,仅检查 transport 状态)
Sourcepub async fn is_terminated_async(&self) -> bool
pub async fn is_terminated_async(&self) -> bool
异步检查后端连接是否已断开(会发送验证请求)
Trait Implementations§
Source§impl Clone for ProxyHandler
impl Clone for ProxyHandler
Source§fn clone(&self) -> ProxyHandler
fn clone(&self) -> ProxyHandler
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for ProxyHandler
impl Debug for ProxyHandler
Source§impl ServerHandler for ProxyHandler
impl ServerHandler for ProxyHandler
fn get_info(&self) -> ServerInfo
async fn list_tools( &self, request: Option<PaginatedRequestParam>, context: RequestContext<RoleServer>, ) -> Result<ListToolsResult, ErrorData>
async fn call_tool( &self, request: CallToolRequestParam, context: RequestContext<RoleServer>, ) -> Result<CallToolResult, ErrorData>
async fn list_resources( &self, request: Option<PaginatedRequestParam>, context: RequestContext<RoleServer>, ) -> Result<ListResourcesResult, ErrorData>
async fn read_resource( &self, request: ReadResourceRequestParam, context: RequestContext<RoleServer>, ) -> Result<ReadResourceResult, ErrorData>
async fn list_resource_templates( &self, request: Option<PaginatedRequestParam>, context: RequestContext<RoleServer>, ) -> Result<ListResourceTemplatesResult, ErrorData>
async fn list_prompts( &self, request: Option<PaginatedRequestParam>, context: RequestContext<RoleServer>, ) -> Result<ListPromptsResult, ErrorData>
async fn get_prompt( &self, request: GetPromptRequestParam, context: RequestContext<RoleServer>, ) -> Result<GetPromptResult, ErrorData>
async fn complete( &self, request: CompleteRequestParam, context: RequestContext<RoleServer>, ) -> Result<CompleteResult, ErrorData>
async fn on_progress( &self, notification: ProgressNotificationParam, _context: NotificationContext<RoleServer>, )
async fn on_cancelled( &self, notification: CancelledNotificationParam, _context: NotificationContext<RoleServer>, )
fn ping( &self, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<(), ErrorData>> + Send
fn initialize( &self, request: InitializeRequestParam, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<InitializeResult, ErrorData>> + Send
fn set_level( &self, request: SetLevelRequestParam, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<(), ErrorData>> + Send
fn subscribe( &self, request: SubscribeRequestParam, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<(), ErrorData>> + Send
fn unsubscribe( &self, request: UnsubscribeRequestParam, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<(), ErrorData>> + Send
fn on_initialized( &self, context: NotificationContext<RoleServer>, ) -> impl Future<Output = ()> + Send
fn on_roots_list_changed( &self, context: NotificationContext<RoleServer>, ) -> impl Future<Output = ()> + Send
fn on_custom_notification( &self, notification: CustomClientNotification, context: NotificationContext<RoleServer>, ) -> impl Future<Output = ()> + Send
Auto Trait Implementations§
impl Freeze for ProxyHandler
impl !RefUnwindSafe for ProxyHandler
impl Send for ProxyHandler
impl Sync for ProxyHandler
impl Unpin for ProxyHandler
impl !UnwindSafe for ProxyHandler
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<R, S> DynService<R> for Swhere
R: ServiceRole,
S: Service<R>,
impl<R, S> DynService<R> for Swhere
R: ServiceRole,
S: Service<R>,
fn handle_request( &self, request: <R as ServiceRole>::PeerReq, context: RequestContext<R>, ) -> Pin<Box<dyn Future<Output = Result<<R as ServiceRole>::Resp, ErrorData>> + Send + '_>>
fn handle_notification( &self, notification: <R as ServiceRole>::PeerNot, context: NotificationContext<R>, ) -> Pin<Box<dyn Future<Output = Result<(), ErrorData>> + Send + '_>>
fn get_info(&self) -> <R as ServiceRole>::Info
Source§impl<T> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
Source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
Source§impl<H> Service<RoleServer> for Hwhere
H: ServerHandler,
impl<H> Service<RoleServer> for Hwhere
H: ServerHandler,
async fn handle_request( &self, request: <RoleServer as ServiceRole>::PeerReq, context: RequestContext<RoleServer>, ) -> Result<<RoleServer as ServiceRole>::Resp, ErrorData>
async fn handle_notification( &self, notification: <RoleServer as ServiceRole>::PeerNot, context: NotificationContext<RoleServer>, ) -> Result<(), ErrorData>
fn get_info(&self) -> <RoleServer as ServiceRole>::Info
Source§impl<S> ServiceExt<RoleServer> for Swhere
S: Service<RoleServer>,
impl<S> ServiceExt<RoleServer> for Swhere
S: Service<RoleServer>,
fn serve_with_ct<T, E, A>( self, transport: T, ct: CancellationToken, ) -> impl Future<Output = Result<RunningService<RoleServer, S>, ServerInitializeError>> + Send
Source§fn into_dyn(self) -> Box<dyn DynService<R>>
fn into_dyn(self) -> Box<dyn DynService<R>>
Convert this service to a dynamic boxed service Read more