0

我开始使用 Java 中的 Finagle 库,并尝试建立几个以 JSON 进行通信的基本 HTTP 服务。
让它成为主服务和从服务。

主服务有以下逻辑:

  • 它在启动时运行一个线程,向从属设备发送命令请求
  • 它侦听来自从站的错误/成功报告

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

  • 对于它收到的命令,它立即发送一个 ack。
  • 然后它启动一个线程来执行命令指定的任务。
  • 它将作业(或错误)的结果以 JSON 格式发送回 master。

我有以下代码:

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();
}  

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

服务器是否启动并仅通过调用来监听Http.serve()?或者这是否发生在Await.ready()通话中?
我假设后者,并将 aThread.sleep()放入由sendCommands(). 这是必需的吗?
另外,有没有更好的方法来干净地在主服务器上启动这个命令发布线程?

4

1 回答 1

0

好的,经过一些测试,我发现了这一点。

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

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

于 2015-02-19T10:16:30.453 回答