Vert.x Web之Router

  Vert.x Web 是一系列用于基于 Vert.x 构建 Web 应用的构建模块。

  Vert.x Web 的大多数特性被实现为了处理器(Handler),因此您随时可以实现您自己的处理器。我们预计随着时间的推移会有更多的处理器被实现。

使用 Vert.x Web

  

<dependency>
  <groupId>io.vertx</groupId>
  <artifactId>vertx-web</artifactId>
  <version>3.4.2</version>
</dependency>

回顾 Vert.x Core 的 HTTP 服务端

HttpServer server = vertx.createHttpServer();

server.requestHandler(request -> {

  // 所有的请求都会调用这个处理器处理
  HttpServerResponse response = request.response();
  response.putHeader("content-type", "text/plain");

  // 写入响应并结束处理
  response.end("Hello World!");
});

server.listen(8080);

Vert.x Web 的基本概念

  Router 是 Vert.x Web 的核心概念之一。它是一个维护了零或多个 Route 的对象。

  Router 接收 HTTP 请求,并查找首个匹配该请求的 Route,然后将请求传递给这个 Route

  Route 可以持有一个与之关联的处理器用于接收请求。您可以通过这个处理器对请求做一些事情,然后结束响应或者把请求传递给下一个匹配的处理器。

  以下是一个简单的路由示例:

HttpServer server = vertx.createHttpServer();

Router router = Router.router(vertx);

router.route().handler(routingContext -> {

  // 所有的请求都会调用这个处理器处理
  HttpServerResponse response = routingContext.response();
  response.putHeader("content-type", "text/plain");

  // 写入响应并结束处理
  response.end("Hello World from Vert.x-Web!");
});

server.requestHandler(router::accept).listen(8080);

  做了和上文使用 Vert.x Core 实现的 HTTP 服务器基本相同的事情,只是这一次换成了 Vert.x Web。

  和上文一样,我们创建了一个 HTTP 服务器,然后创建了一个 Router。在这之后,我们创建了一个没有匹配条件的 Route,这个 route 会匹配所有到达这个服务器的请求。

  之后,我们为这个 route 指定了一个处理器,所有的请求都会调用这个处理器处理。

  调用处理器的参数是一个 RoutingContext 对象。它不仅包含了 Vert.x 中标准的 HttpServerRequest 和HttpServerResponse,还包含了各种用于简化 Vert.x Web 使用的东西。

  每一个被路由的请求对应一个唯一的 RoutingContext,这个实例会被传递到所有处理这个请求的处理器上。

处理请求并调用下一个处理器

  当 Vert.x Web 决定路由一个请求到匹配的 route 上,它会使用一个 RoutingContext 调用对应处理器。

  如果您不在处理器里结束这个响应,您需要调用 next 方法让其他匹配的 Route 来处理请求(如果有)。

  您不需要在处理器执行完毕时调用 next 方法。您可以在之后您需要的时间点调用它:

Route route1 = router.route("/some/path/").handler(routingContext -> {

  HttpServerResponse response = routingContext.response();
  // 由于我们会在不同的处理器里写入响应,因此需要启用分块传输
  // 仅当需要通过多个处理器输出响应时才需要
  response.setChunked(true);

  response.write("route1\n");

  // 5 秒后调用下一个处理器
  routingContext.vertx().setTimer(5000, tid -> routingContext.next());
});

Route route2 = router.route("/some/path/").handler(routingContext -> {

  HttpServerResponse response = routingContext.response();
  response.write("route2\n");

  // 5 秒后调用下一个处理器
  routingContext.vertx().setTimer(5000, tid ->  routingContext.next());
});

Route route3 = router.route("/some/path/").handler(routingContext -> {

  HttpServerResponse response = routingContext.response();
  response.write("route3");

  // 结束响应
  routingContext.response().end();
});

  在上述的例子中,route1 向响应里写入了数据,5秒之后 route2 向响应里写入了数据,再5秒之后 route3 向响应里写入了数据并结束了响应。

  注意,所有发生的这些没有线程阻塞。

原文地址:https://www.cnblogs.com/heqiyoujing/p/9757925.html

时间: 2024-08-10 06:23:35

Vert.x Web之Router的相关文章

Cisco Router WEB管理

目前市场上很多思科路由器或者交换机都可以通过WEB方式配置.尽管很多功能还是只能通过CLI配置,但是一些功能还是很有用的,例如端口的流量监控功能 前期准备: 一.设备的IOS要支持WEB管理功能   Router(config)#ip http server      //如果这条命令可以用,说明IOS支持WEB管理 Router(config)#ip http secure-server      //如果这条命令可以用,说明你的IOS还支持HTTPS,安全连接   通过上面命令开启WEB管理

Vert.x学习之 Web Client

Vert.x Web Client 原文档 组件源码 组件示例 中英对照表 Pump:泵(平滑流式数据读入内存的机制,防止一次性将大量数据读入内存导致内存溢出) Response Codec:响应编解码器(编码及解码工具) Body Codec:响应体编解码器 组件介绍 Vert.x Web Client(Web客户端)是一个异步的 HTTP 和 HTTP/2 客户端. Web Client使得发送 HTTP 请求以及从 Web 服务器接收 HTTP 响应变得更加便捷,同时提供了额外的高级功能,

使用Vert.x构建Web服务器和消息系统

如果你对Node.js感兴趣,Vert.x可能是你的下一个大事件:一个建立在JVM上一个类似的架构企业制度. 这一部分介绍Vert.x是通过两个动手的例子(基于Vert.x 2.0). 当Node.js出现,许多开发者兴奋的感到可以用不寻常的方法来构建可扩展的服务器端应用程序. 而不是开始,将服务使用多线程的请求重量级的容器.Node.js是启动多个轻便单线程的服务器和流量路由到他们. 现在,类似的框架已经出现,它的服务器部署在一个JVM中,使用JVM设施来管理流量轻量级服务器进程. 本批中的开

Vert.x简介

Vert.x 近年来,移动网络.社交网络和电商的兴起,使各大服务提供商的客户端请求数量激增,传统服务器架构已不堪重负,致使基于事件和异步的解决方案备受追捧,如Nginx.NodeJS.Vert.x框架基于事件和异步,依托于全异步Java服务器Netty,并扩展了很多其他特性,以其轻量.高性能.支持多语言开发而备受开发者青睐. 基本介绍 近年来,移动网络.社交网络和电商的兴起,使各大服务提供商的客户端请求数量激增,传统服务器架构已不堪重负,致使基于事件和异步的解决方案备受追捧,如Nginx.Nod

Vert.x WebClient WebClientOptions

本文参考自Vert.x Web Client官方文档.套用官网的话来说, Vert.x Web Client是一个异步的HTTP和HTTP/2网络客户端. 相对来说,这是一个比较小的框架,而且功能也很直接,做一个方便好用的HTTP客户端.它具有以下功能: Json body 编码 / 解码request 参数统一的错误处理表单提交需要注意,它和Vertx核心包中的HttpClient有很多联系.它继承了HttpClient,提供了更多功能. 引用类库要使用这个类库很简单.如果使用Maven,添加

cisco-router-nat/pat网络/端口地址转换

(以下所有内容为本手纯手打,有纰漏的地方,也请大家多多包含可发小猪消息赐教交流!) (本文所有内容及批注呈内收递归的架构显示,因格式显示不懂之处望谅解!) (本文手打之,命令关键字大多使用简写,如有不明最好是键入命令时惯用tab补全!) 网络地址转转nat(static静态转换/dynamic动态转换).端口多路复用pat: 1.静态nat的配置: router(config)#int f0/0 router(config-if)#ip add 10.0.0.1 255.255.255.0 (设

从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 二十一║Vue实战:开发环境搭建【详细版】

系列教程一目录:.netcore+vue 前后端分离 系列教程二目录:DDD领域驱动设计 系列教程三目录:Nuxt.js TiBug系统 系列教程四目录:VueAdmin 后台管理系统 系列教程五目录:IdentityServer4 授权服务器 本文梯子 缘起 零.今天要完成左下角红色的部分 A.Vue 常见的IDE —— 我是开发工具,干活的都是我 1.VsCode 2.Webstorm 3.Atom B.安装Nodejs环境 —— 我是运行环境,没我不行 C.安装 npm / cnpm ——

VUE CLI3.X 创建项目

Node.js环境搭建 Node.js基于V8引擎,可以让js代码脱离浏览器运行 Vue CLI3.0 需要Node.js 8.9或者更高版本. 用nvm或者nvm-windows在同一台电脑中管理多个Node版本 nvm github地址:https://github.com/nvm-sh/nvm Vue CLI 3.0环境搭建 卸载老版本vue-cli:npm uninstall vue-cli -g 安装新版本:npm install -g @vue/cli 原型开发:npm instal

实验十 NAT和PPP的应用

NAT和PPP的应用 1. 实验目的通过本实验可以:1) 理解 NAT 的作用2) 理解不同 NAT 的特点及配置3) 理解不同 NAT 的使用场合4) 掌握 PPP 的 PAP 和 CHAP 验证5) 理解辅助地址的作用6) 掌握 NAT 的验证和查看命令 2. 拓扑结构3. 实验需求1) 参照逻辑拓扑,使用合适的线缆完成物理拓扑的搭建2) 公司 COM1 和 COM2 内部网段都为 192.168.1.0/24,其中 COM1 的 SRV地址为 192.168.1.100/24,COM2 的