vert.x java异步模型框架

时间:2021-01-02 18:05:27

java异步模型框架

**

概要

**
java的框架有很多种,开源的也有很多,经常用到的有struts.x、spring、hibernate、spring mvc、struts mvc等等。struts和spring应该是最常用了。异步的编程框架中vert.x应该是很牛逼的了。java一直以来性能方面一直有争议,希望vert.x能给我们java程序员带来福音。
Web框架排行榜 Netty、Servlet和Vert.x位列前三。据说比node.js还要快几倍的。csdn的数据地址:
http://www.csdn.net/article/2013-03-29/2814701-Web-Framework-Netty-Servlet-Vertx

开发环境部署:

1.下载vert.x的release的最新版本。地址:http://vertx.io/
2.设置vert.x的环境变量,在环境变量的path中加上vert.x的bin目录
3.如果需要源码编译请安装maven(maven安装就不介绍了网上资料一大堆)。maven下载地址https://maven.apache.org/
4.需要开发的IDE Eclipse,jdk1.7或者1.7以上(注意不支持1.7以下的版本,jdk请到oracle的官方网站下载)
5.maven设置依赖jar包

<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-core</artifactId>
<version>${vertx.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-platform</artifactId>
<version>${vertx.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>

6.eclipse部署debug开发环境:

设置mainclass为org.vertx.java.platform.impl.cli.Starter

vert.x java异步模型框架

设置artuments为run com.cg.entrance.StartServer -cp ${project_loc:sandbox-release}/target/classes(编译目录)
然后设置Other为vert.x的安装目录
vert.x java异步模型框架

然后在User Entries添加vert.x的conf目录

vert.x java异步模型框架

最后在Source中添加自己的项目

vert.x java异步模型框架

好了eclipse的debug模式就成功了。

代码测试。

vert.x用到Netty的一些核心,所以效率上也是杠杠的,vert.x来说可以启动http协议的服务,也就是HttpServer服务,也可以提供TCP/IP的服务也就是SocketServer.

HttpServer例子
WebServer.java

package com.cg.entrance;

import org.vertx.java.core.http.RouteMatcher;
import org.vertx.java.platform.Verticle;

import com.cg.core.init.InitMatcher;
import com.cg.handler.BusinessHandler;

/**
* 功能:总入口 ,处理各种请求
*/

public class WebServer extends Verticle {

// 监听的端口号
private static final int port = 8080;
private static final RouteMatcher matcher = new RouteMatcher();
static {
InitMatcher.init(matcher);
}

public void start() {
//匹配/business的请求
matcher.get("/business", new BussinessHandler());
vertx.createHttpServer().requestHandler(matcher).listen(port);
container.logger().info("web服务启动,监听端口: " + port);
}
}

BussinessHandler.java

package com.cg.handler;

import org.vertx.java.core.Handler;
import org.vertx.java.core.http.HttpServerRequest;

/**
* 功能描述:BussinessHandler
* @version 2.0.0
*/

public class BussinessHandler implements Handler<HttpServerRequest> {

@Override
public void handle(HttpServerRequest request) {
/**
* 需要对request和response的操作
*/

request.response().end("User: " + request.params().get("user"));
}

}

接下来贴上SocketServer的代码

vert.x在SocKet的服务中,也可以基于消息的开发(pub和sub)

SocKetServer.java

package com.cg.entrance;

import org.vertx.java.core.Handler;
import org.vertx.java.core.buffer.Buffer;
import org.vertx.java.core.eventbus.EventBus;
import org.vertx.java.core.net.NetServer;
import org.vertx.java.core.net.NetSocket;
import org.vertx.java.platform.Verticle;
import com.cg.IConstants;
import com.cg.verticle.PubVerticle;

/**
* 功能描述:socket 接受数据并发送给订阅者 异步模型编程
* @version 2.0.0
*/

public class SocketServer extends Verticle implements IConstants {

public void start() {
container.deployVerticle(PubVerticle.class.getName());
NetServer server = vertx.createNetServer();
Handler<NetSocket> handler = new Handler<NetSocket>() {
public void handle(final NetSocket sock) {
sock.dataHandler(new Handler<Buffer>() {
//buffer就是socket接受的数据
public void handle(final Buffer buffer) {

//eventbus是重要的组件
EventBus eb = vertx.eventBus();
//ecentbus把socket的数据传给订阅者来处理
eb.publish(PubVerticle.class.getName(), buffer);
}
});
}
};
server.connectHandler(handler).listen(SOCKETPORT, HOST);
}
}

PubVerticle.java

package com.cg.verticle;

import org.vertx.java.core.Handler;
import org.vertx.java.core.eventbus.EventBus;
import org.vertx.java.core.eventbus.Message;
import org.vertx.java.core.json.JsonObject;
import org.vertx.java.core.logging.Logger;
import org.vertx.java.platform.Verticle;

/**
* 功能描述:订阅者Verticle
* @version 2.0.0
*/

public class PubVerticle extends Verticle {

@Override
public void start() {
EventBus eb = vertx.eventBus();
Handler<Message<JsonObject>> handler = new Handler<Message<JsonObject>>() {
@Override
public void handle(Message<JsonObject> message) {
Logger logger = container.logger();
logger.info(message.body());
}
};
eb.registerHandler(PubVerticle.class.getName(), handler);
}
}

完毕。