全部,
我正在尝试决定是否为我的应用程序使用 NodeJS 或 Java。我将通过 HTTP 与 CouchDB 进行通信,并且想要一个异步非阻塞设计,在这种设计中,我的应用程序线程可以在等待来自 CouchDB 的查询响应时处理其他请求。
我更喜欢使用 Java,而且几天来我一直在研究 AsyncHttpClient 作为一种潜在的解决方案。但是,我在理解图书馆时遇到了一些麻烦,并且认为我可能对某些东西有根本的误解。
我在这里发布了一个要点:https ://gist.github.com/conorgil/5505603
我希望这个要点能打印出“请求 X 已发送!” 以及每个请求的“响应 X:某事”。但是,在每个 Future 调用 get() 之前,似乎没有进行 HTTP 调用(因此,没有执行处理程序)。取消注释第 23 行 f.get() 使代码按预期工作,但对 Future#get() 的调用被阻塞,对吗?有没有办法只提供一个回调函数,一旦 HTTP 响应被完全检索而不会阻塞就执行该函数?
如下所示:1) 请求进入主线程 2) 对 CouchDB 进行异步、非阻塞 HTTP 调用。注册完成处理程序以处理来自 CouchDB 的响应 3) 主线程现在可以自由处理下一个请求 4) 来自 CouchDB 的 HTTP 响应到达某个点并调用注册的处理程序以执行某些业务逻辑 5) 主线程继续只是处理请求(对于不需要打CouchDB的请求,可以很快得到响应)
我从根本上误解了这里的东西吗?有可能在 Java 中做这种类型的事情吗?AsyncHttpClient 是答案吗?这个问题是相关的,但不确定自 2011 年以来情况是否发生了变化(使用 Java AsyncHttpClient 库执行异步连接?)
由于 NodeJS 运行一个事件循环,这种非阻塞的异步行为是标准的。您只需注册一个回调函数来在收到数据库响应时处理它,而事件循环将同时处理其他事情。
任何和所有的建议表示赞赏。
谢谢,康纳