Я использую grpc-rs для gRPC в моем проекте Rust. Во всех примерах, которые я видел до сих пор, я вижу, что сервер может быть запущен с:
let mut server = ServerBuilder::new(env)
.register_service(service)
.bind("127.0.0.1", 50_051)
.build()
.unwrap();
server.start();
let (tx, rx) = oneshot::channel();
thread::spawn(move || {
info!("Press ENTER to exit...");
let _ = io::stdin().read(&mut [0]).unwrap();
tx.send(())
});
let _ = rx.wait();
let _ = server.shutdown().wait();
Ссылка на полный код .
Проблема в том, что основной поток, который создал сервер, остается неиспользованным (и завершается при нажатии клавиши).
Есть ли способ избежать траты основного потока и вместо этого запустить / запустить сервер gRPC в основном потоке, вызвав метод запуска синхронной блокировки?