Expand description
RPC protocol definitions using tarpc.
This module implements the tarpc-based RPC layer for inter-node communication including:
- Service definitions for colony operations
- Client and server implementations
- Connection pooling and retry logic
§Architecture
The RPC layer consists of three main components:
- Protocol: Trait definitions for
ShardServiceandCoordinatorService - Server: Server implementations that wrap local components
- Client: Client utilities including connection pooling
§Example: Starting a Shard Server
ⓘ
use phago_distributed::rpc::server::ShardServer;
use phago_distributed::shard::ShardedColony;
let shard = Arc::new(RwLock::new(ShardedColony::new(...)));
let server = ShardServer::new(shard);
server.serve("127.0.0.1:8080".parse().unwrap()).await?;§Example: Connecting as a Client
ⓘ
use phago_distributed::rpc::client::{connect_to_shard, ShardClientPool};
// Direct connection
let client = connect_to_shard("127.0.0.1:8080".parse().unwrap()).await?;
// Or use the connection pool
let pool = ShardClientPool::new();
pool.register_shard(ShardId::new(0), "127.0.0.1:8080".parse().unwrap());
let client = pool.get_client(ShardId::new(0)).await?;Re-exports§
pub use protocol::CoordinatorService;pub use protocol::CoordinatorServiceClient;pub use protocol::RpcError;pub use protocol::RpcResult;pub use protocol::ShardService;pub use protocol::ShardServiceClient;pub use protocol::TickStatus;pub use messages::BatchUpdate;pub use messages::BatchUpdateResult;pub use messages::CrossShardEdgeNotification;pub use messages::CrossShardSignal;pub use messages::HeartbeatMessage;pub use messages::HeartbeatResponse;pub use messages::NodeTransferRequest;pub use messages::NodeTransferResponse;pub use messages::QueryGatherResponse;pub use messages::QueryScatterRequest;pub use messages::ShardCommand;pub use messages::StartTickMessage;pub use messages::UpdateOperation;pub use client::connect_to_coordinator;pub use client::connect_to_coordinator_with_config;pub use client::connect_to_coordinator_with_retry;pub use client::connect_to_shard;pub use client::connect_to_shard_with_config;pub use client::connect_to_shard_with_retry;pub use client::ClientConfig;pub use client::CoordinatorClient;pub use client::ShardClientPool;pub use server::CoordinatorServer;pub use server::ShardServer;