运行 在 Finagle 服务器中启动异步线程的最佳方式

Best way to run an asynchronous thread in a Finagle Server, on start up

我开始使用 Java 中的 Finagle 库,并尝试启动几个在 JSON 中通信的基本 HTTP 服务。
让这成为主从服务。

主服务具有以下逻辑:

从服务器的逻辑是这样的:

我有以下代码:

HttpMuxer muxService = new HttpMuxer().withHandler("/", new MasterService());
ListeningServer server = Http.serve(new InetSocketAddress("localhost", 8000), muxService);

// This method runs a Function0 closure in a Future pool.
// It sends requests to slave, and exits after the commands are sent.
sendCommands();

try {
    Await.ready(server);
} catch (TimeoutException e) {
    e.printStackTrace();
} catch (InterruptedException e) {
    e.printStackTrace();
}  

我的问题是:
现在,理想情况下,这项工作可能需要几秒钟才能完成。但如果出现错误,它几乎可以立即向 master 发送错误报告消息。一旦我调用 sendCommands(),任何时候我都可以期望从属尝试联系主控。

服务器是否已启动并仅通过对 Http.serve() 的调用进行侦听?或者这是否发生在 Await.ready() 通话中?
我假设是后者,并在 sendCommands() 产生的线程中放置一个 Thread.sleep()。这是必需的吗?
另外,是否有更好的方法来在主机上干净地启动此命令发布线程?

好的,经过一些测试我明白了。

Http.serve() 的调用在给定端口上启动服务器,传入请求由 MasterService

正确处理

Await.ready() 循环只是让线程保持活动状态。即使您将其替换为 Thread.sleep(n)

,服务器也会响应