pub struct FutuGrpcService { /* private fields */ }Expand description
gRPC 服务实现
Implementations§
Source§impl FutuGrpcService
impl FutuGrpcService
pub fn new( router: Arc<RequestRouter>, push_broadcaster: Arc<GrpcPushBroadcaster>, ) -> Self
Trait Implementations§
Source§impl FutuOpenD for FutuGrpcService
impl FutuOpenD for FutuGrpcService
Source§fn request<'life0, 'async_trait>(
&'life0 self,
request: Request<FutuRequest>,
) -> Pin<Box<dyn Future<Output = Result<Response<FutuResponse>, Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn request<'life0, 'async_trait>(
&'life0 self,
request: Request<FutuRequest>,
) -> Pin<Box<dyn Future<Output = Result<Response<FutuResponse>, Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
通用请求-响应
Source§fn subscribe_push<'life0, 'async_trait>(
&'life0 self,
request: Request<SubscribePushRequest>,
) -> Pin<Box<dyn Future<Output = Result<Response<Self::SubscribePushStream>, Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn subscribe_push<'life0, 'async_trait>(
&'life0 self,
request: Request<SubscribePushRequest>,
) -> Pin<Box<dyn Future<Output = Result<Response<Self::SubscribePushStream>, Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
流式推送:客户端建立连接后持续接收行情、交易、广播推送
v1.1:按订阅 key 的 scope 过滤推送 —— qot:read-only 的 key 不会收到
trade 类(账户交易回报),对齐 REST /ws v0.9.0 加的 push filter。
§v1.4.104 阶段 7-2: pipeline 委托
handshake: pipeline 调一次 with Endpoint::Event("subscribe") +
needed_scope=None (跳 scope check, 走 OR 语义手工 check). Allow → 拿
rec snapshot. Reject (Bearer invalid / expired) → translate to gRPC Status.
per-event filter: stream 内每 event 调一次 pipeline with
Credential::PreVerified(rec) + Endpoint::Event(event_type) +
needed_scope=Some(scope_for_event(...)) + explicit_acc_id (trade event
给 event.acc_id, 其他不传) + audit_emit=false (避免每 event 一条 audit
把日志冲爆) + commit_rate=false (push 不计 rate). Reject → silent drop +
metrics::bump_ws_filtered. Allow → forward.
与 v1.4.103 行为 byte-identical: handshake qot:read OR acc:read, per-event
scope match + trade acc_id whitelist (受限 key + acc_id=0 仍 drop, 由 pipeline
body_aware::CheckCtx { acc_id: Some(0) } + allowed_acc_ids 非空 → reject 实现).
Source§type SubscribePushStream = ReceiverStream<Result<PushEvent, Status>>
type SubscribePushStream = ReceiverStream<Result<PushEvent, Status>>
Auto Trait Implementations§
impl !Freeze for FutuGrpcService
impl !RefUnwindSafe for FutuGrpcService
impl Send for FutuGrpcService
impl Sync for FutuGrpcService
impl Unpin for FutuGrpcService
impl UnsafeUnpin for FutuGrpcService
impl !UnwindSafe for FutuGrpcService
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
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request§impl<L> LayerExt<L> for L
impl<L> LayerExt<L> for L
§fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
Layered].