Vert.x 学习和使用

1.Vert.x 是什么

 Vert.x是一个轻量级的高性能JVM应用平台,基于它可开发各种移动,Web和企业应用程序。它是基于netty和mina的NIO的编写的。

Vert.x 官网:https://vertx.io/docs/vertx-core/java/

2.怎么用

package com.lyj.learn.learndesign.vertX;

import io.vertx.core.AbstractVerticle;
import io.vertx.core.Handler;
import io.vertx.core.Vertx;
import io.vertx.core.VertxOptions;
import io.vertx.core.buffer.Buffer;
import io.vertx.core.http.HttpServer;
import io.vertx.core.http.HttpServerOptions;
import io.vertx.core.http.HttpServerRequest;
import io.vertx.core.http.HttpServerResponse;
import io.vertx.ext.web.Router;
import io.vertx.ext.web.RoutingContext;

/**
 * @author: lyj
 * @since: 2019/4/4
 */
public class EchoServer extends AbstractVerticle {

    @Override
    public void start() {
        System.out.println("HttpServer star....");
        HttpServerOptions httpServerOptions = new HttpServerOptions();
        httpServerOptions.setMaxInitialLineLength(1024 * 1024*1024).setMaxHeaderSize(1024 * 1024*1024);
        HttpServer httpServer = getVertx().createHttpServer(httpServerOptions);
        Router router = Router.router(vertx);

        //异步 route里的是自定义路径
        router.route("/hello2").handler(new Handler<RoutingContext>() {
            public void handle(RoutingContext routingContext) {
                HttpServerRequest request = routingContext.request();
                HttpServerResponse response = routingContext.response();
                String name = request.getParam("name");
            
                getVertx().executeBlocking(f -> {
                    byte[] shetfList = ("沙发大师傅,"+name).getBytes();
                    response.putHeader("content-type", "text/plain");
                    response.putHeader("text/html", "charset=UTF-8");
//                    response.putHeader("content-encoding", "gzip");
                    response.putHeader("content-length", String.valueOf(shetfList.length));
                    response.write(Buffer.buffer(shetfList));
                    response.setStatusCode(200);
                    response.end();
                }, false, r -> {
                });
            }
        });

        router.get("/hello").handler(new Handler<RoutingContext>() {
            public void handle(RoutingContext routingContext) {
                routingContext.response().putHeader("content-type", "text/html").end("Hello World");
            }
        });

        //异步
        router.route("/server/status").handler(routingContext -> {
            HttpServerResponse response = routingContext.response();
            getVertx().executeBlocking(f -> {
                response.putHeader("content-type", "text/plain");
                response.putHeader("text/html", "charset=UTF-8");
                response.setStatusCode(200);
                response.end(Buffer.buffer("I AM OK!"));
            }, false, r -> {
            });
        });

        //使用阻塞处理程序
        router.route().blockingHandler(routingContext -> {
            // Do something that might take some time synchronously
            //执行下一个方法
            routingContext.next();
//            HttpServerResponse response = routingContext.response();
//            vertx.executeBlocking(f -> {
//                response.putHeader("content-type", "text/plain");
//                response.putHeader("text/html", "charset=UTF-8");
//                response.setStatusCode(200);
//                response.end(Buffer.buffer("路径出错!"));
//            }, false, r -> {
//            });
        });

        // 传递方法引用,监听端口
        getVertx().createHttpServer().requestHandler(router::accept).listen(9090);
        System.out.println("HttpServer start over");
    }

    public static void main(String[] args) {
        VertxOptions options = new VertxOptions();
        options.setWorkerPoolSize(200);
        options.setEventLoopPoolSize(300);
        options.setInternalBlockingPoolSize(200);
        // Vert.x实例是vert.x api的入口点,我们调用vert.x中的核心服务时,均要先获取vert.x实例,
        // 通过该实例来调用相应的服务,例如部署verticle、创建http server
        Vertx.vertx(options).deployVerticle(new EchoServer());

    }

}

参考链接:

1.https://blog.csdn.net/z714303584/article/details/46877105

2.https://www.jianshu.com/p/e25234203602

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值