我开始使用 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()
. 这是必需的吗?
另外,有没有更好的方法来干净地在主服务器上启动这个命令发布线程?