zoukankan      html  css  js  c++  java
  • Vert.x初体验

    源码:https://github.com/dagger9527/vertx_demo

    项目工程:quickstart

    vert.x最大的特点是异步编程、非阻塞式。非阻塞式的方式可以让单线程以最大的效率处理客户端请求,最大幅度的利用单核处理器的优势。和多线程编程的方式不同,异步编程是单线程的,它在接收一个请求时,会将这个请求作为一个任务放到循环事件队列中,然后在后台依次执行队列中的任务,它不会阻塞后来的请求,所有对请求的处理操作都在后台完成。

    添加maven依赖

    <dependencies>
        <dependency>
            <groupId>io.vertx</groupId>
            <artifactId>vertx-core</artifactId>
        </dependency>
    </dependencies>
    

    创建一个异步服务器,需要创建一个类然后继承AbstractVerticle,重写其中的start方法,需要在start方法中创建http服务器。

    属性vertx在AbstractVerticle中是已经定义的,可以直接使用,它代表的当前Verticle的实例对象。

    HttpServerOptions类是创建Http服务器的配置类,设置服务器启动端口是8080。

    requestHandler方法是处理请求的逻辑实现,响应内容为Hello World,注意最后的end方法不能少,不然客户端会一直等待响应。

    public class MainVerticle extends AbstractVerticle {
    
      private Logger logger = LoggerFactory.getLogger(MainVerticle.class);
    
      @Override
      public void start() throws Exception {
        // 创建一个http服务器,并监听8080端口
        vertx.createHttpServer(
          new HttpServerOptions()
            .setPort(8080)
        ).requestHandler(request -> {
          request
            .response()
            .putHeader("Content-Type", "text/html;charset=UTF-8")
            .end("<h1>Hello World</h1>");
        }).listen();
        logger.info("MainVerticle Server Starting..");
      }
    
    }
    

    Verticle实现类有了之后,需要一个main方法去启动它。

    再创建一个vertx对象,通过deployVerticle部署刚刚的Verticle实例。

    public class MainLauch {
    
      public static void main(String[] args) {
        Vertx vertx = Vertx.vertx();
        vertx.deployVerticle(MainVerticle.class.getName());
      }
    
    }
    

    运行main方法,可以看到控制台打印日志,说明http服务已启动。访问本地8080端口。

    image-20200128104422795

    image-20200128104506833

    将服务打包成一个jar包

    继续添加 maven-shade-plugin 插件

    Main-Class标签声明main方法所在类

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>${maven.shade.plugin.version}</version>
        <executions>
            <execution>
                <phase>package</phase>
                <goals>
                    <goal>shade</goal>
                </goals>
                <configuration>
                    <transformers>
                        <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                            <manifestEntries>
                                <Main-Class>${main.class}</Main-Class>
                            </manifestEntries>
                        </transformer>
                    </transformers>
                    <artifactSet />
      	              <outputFile>${project.build.directory}/${project.artifactId}.jar</outputFile>
                </configuration>
            </execution>
        </executions>
    </plugin>
    

    在quickstart项目命令行下运行 mvn clean install,当前target目录下发现quickstart.jar,运行java -jar quickstart.jar,再次访问本地8080端口,发现服务正常启动。

    注意当前http服务打包成jar文件之后,响应给浏览器会有中文乱码问题。但是用idea启动却没有这个问题,如果有人知道答案请在评论后方留言,感激不尽。

    参考:https://vertxchina.github.io/vertx-translation-chinese/start/Start.html

  • 相关阅读:
    3:Exchange2016图形化安装和无人值守安装
    hdu 3980 Paint Chain (sg)
    hdu 1850 Being a Good Boy in Spring Festival (Nim)
    zoj 2971 Give Me the Number
    hdu 1847 Good Luck in CET4 Everybody! (sg)
    hdu 1754 I hate it (线段树)
    poj 1704 Georgia ans Bob (StaircaseNim)
    hdu 1907 John (Nim变形)
    hdu 1536 SNim (sg)
    hdu 1166 敌兵布阵 (线段树)
  • 原文地址:https://www.cnblogs.com/dagger9527/p/12237563.html
Copyright © 2011-2022 走看看