gRPC Service Mechanism 
Monibuca provides gRPC service support, allowing plugins to offer services via the gRPC protocol. This document explains the implementation mechanism and usage of gRPC services.
Service Registration Mechanism 
1. Service Registration 
Plugins need to pass ServiceDesc and Handler when calling InstallPlugin to register gRPC services:
go
// Example: Registering gRPC service in a plugin
type MyPlugin struct {
    pb.UnimplementedApiServer
    m7s.Plugin
}
var _ = m7s.InstallPlugin[MyPlugin](
    m7s.DefaultYaml(`your yaml config here`),
    &pb.Api_ServiceDesc,           // gRPC service descriptor
    pb.RegisterApiHandler,         // gRPC gateway handler
    // ... other parameters
)2. Proto File Specifications 
All gRPC services must follow these Proto file specifications:
- Response structs must include code, message, and data fields
 - Error handling should return errors directly, without manually setting code and message
 - Run 
sh scripts/protoc.shto generate pb files after modifying global.proto - Run 
sh scripts/protoc.sh {pluginName}to generate corresponding pb files after modifying plugin-related proto files 
Service Implementation Mechanism 
1. Server Configuration 
gRPC services use port settings from the global TCP configuration:
yaml
global:
  tcp:
    listenaddr: :8080     # gRPC service listen address and port
    listentls: :8443      # gRPC TLS service listen address and port (if enabled)Configuration items include:
- Listen address and port settings (specified in global TCP configuration)
 - TLS/SSL certificate configuration (if enabled)
 
2. Error Handling 
Error handling follows these principles:
- Return errors directly, no need to manually set code and message
 - The system automatically handles errors and sets response format
 
Best Practices 
Service Definition
- Clear service interface design
 - Appropriate method naming
 - Complete interface documentation
 
Performance Optimization
- Use streaming for large data
 - Set reasonable timeout values
 
Security Considerations
- Enable TLS encryption as needed
 - Implement necessary access controls