Skip to content

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.sh to 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

  1. Service Definition

    • Clear service interface design
    • Appropriate method naming
    • Complete interface documentation
  2. Performance Optimization

    • Use streaming for large data
    • Set reasonable timeout values
  3. Security Considerations

    • Enable TLS encryption as needed
    • Implement necessary access controls

Released under the AGPL License