Class: Nonnative::GRPCServer

Inherits:
Server
  • Object
show all
Defined in:
lib/nonnative/grpc_server.rb

Overview

gRPC server runner implemented using GRPC::RpcServer.

This is a convenience server implementation for running a gRPC service in-process under Nonnative's server lifecycle. It binds to the configured server host and first ports entry.

Important note about logging: the grpc gem uses a global logger. This implementation sets GRPC.logger to write to the configured service.log, and whichever gRPC server is initialized first "wins" that global logger.

See Also:

Instance Method Summary collapse

Constructor Details

#initialize(svc, service) ⇒ GRPCServer

Creates a gRPC server and registers the provided service handler(s).

Parameters:

  • svc (Object, Array<Object>)

    a gRPC service implementation or a non-empty array of implementations (typically ...::Service subclasses or instances)

  • service (Nonnative::ConfigurationServer)

    server configuration

Raises:

  • (ArgumentError)

    if svc is an empty array



21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/nonnative/grpc_server.rb', line 21

def initialize(svc, service)
  @server = GRPC::RpcServer.new
  handlers = svc.is_a?(Array) ? svc : [svc]
  raise ArgumentError, 'gRPC server requires at least one service handler' if handlers.empty?

  handlers.each { |handler| server.handle(handler) }

  # Unfortunately gRPC has only one logger so the first server wins.
  GRPC.define_singleton_method(:logger) do
    @logger ||= Logger.new(service.log)
  end

  super(service)
end