提供动态内容时,使用 vert.x 网络的正确方法是什么?
What is the correct way to use vert.x web when serving dynamic content?
如果我创建一个路由来对 Couchbase 进行一些读写调用,那么在 vert.x 网络中实现它的正确方法是什么?通过使用 handler() 方法或 blockingHandler() 方法?
router.post("/some/path/").handler(routingContext -> {
// a few read write calls to Couchbase here.
});
同样的问题,但在从 Handlebars 或 Pebble 等模板生成 Web 内容的上下文中。使用 handler() 或 blockingHandler()?
这完全取决于您在处理程序中编写的代码类型。首先从你的第二个问题开始,所有模板引擎处理程序都实现了异步 API (尽管加载模板本身是阻塞的,但由于缓存只完成一次)。在这种情况下,您应该使用:
router.post("/some/path/").handler(HandlebarsTemplateEngine.create());
回到第一个问题,如果你的 couchbase 客户端 API 正在阻塞,这意味着它没有响应,它会阻塞直到你从服务器得到响应,那么在这种情况下你必须使用 blockingHandler
否则你会阻止事件循环并通过扩展阻止整个应用程序。
如果您使用的是 couchbase async API,那么您应该使用 handler
变体。有关如何使用异步 API 的示例,请参阅此博客 post。
如果我创建一个路由来对 Couchbase 进行一些读写调用,那么在 vert.x 网络中实现它的正确方法是什么?通过使用 handler() 方法或 blockingHandler() 方法?
router.post("/some/path/").handler(routingContext -> {
// a few read write calls to Couchbase here.
});
同样的问题,但在从 Handlebars 或 Pebble 等模板生成 Web 内容的上下文中。使用 handler() 或 blockingHandler()?
这完全取决于您在处理程序中编写的代码类型。首先从你的第二个问题开始,所有模板引擎处理程序都实现了异步 API (尽管加载模板本身是阻塞的,但由于缓存只完成一次)。在这种情况下,您应该使用:
router.post("/some/path/").handler(HandlebarsTemplateEngine.create());
回到第一个问题,如果你的 couchbase 客户端 API 正在阻塞,这意味着它没有响应,它会阻塞直到你从服务器得到响应,那么在这种情况下你必须使用 blockingHandler
否则你会阻止事件循环并通过扩展阻止整个应用程序。
如果您使用的是 couchbase async API,那么您应该使用 handler
变体。有关如何使用异步 API 的示例,请参阅此博客 post。