浅说vertx

Post on 10-Jun-2015

1.305 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

TRANSCRIPT

浅说 Vert.x胡键( @foxgem )

我是谁 入行时间

10+ 年 社区身份

GroovyQ ( www.groovyq.net)站长 西安社区组织者( OpenParty 、 QClub 西安)

个人兴趣 广泛……,目前专注于 vertx

联系方式 Twitter/ 微博: @foxgem 邮箱: jianhgreat@hotmail.com

什么是 Vert.x ? 文艺范儿的官方定义

Vert.x is a lightweight, high performance application platform for the JVM that's designed for modern mobile, web, and enterprise applications.

胡氏简化版 Node.js on JVM

典型的应用场景 vertx 缺省支持

Socket Server Http Server

WebSocket SockJS

典型应用 解析实时数据帧的通信

服务器 Web 服务器 向前端屏蔽后端数据源

位置的数据服务器 分布式消息处理器 ……

Vert.x 的若干关键词

简单

//典型的 Socket Server结构vertx.createNetServer() .connectHandler{ socket -> socket.dataHandler { buffer -> … }

socket.closedHandler { … }

socket.exceptionHandler { … }}.listen(1234)

Vert.x 的若干关键词

多语言

直接支持的语言 Java JavaScript Ruby Python Groovy

为新语言的支持提供了语言接口

Vert.x 的若干关键词

异步

非阻塞 建立于 Netty 之上

类 Actor 编程范式 事件

事件处理器 事件循环 事件总线

支持本地 / 分布式 publish ,发布 / 订阅 send ,点对点

Vert.x 的若干关键词 事件总线简单示例

发送端

接收端

eb = vertx.eventBus…eb.publish('out.client', repository.findAllClients())

eb.registerHandler('out.client', function(message) { that.total(message.total); that.clients.removeAll(); for (var i = 0; i < message.total; i++) { that.clients.push(message.clients[i]); }; });

Vert.x 的若干关键词

WebSocket

开箱即用的WebSocket 支持

支持 SockJS 考虑到 WebSocket 的

兼容性问题,推荐以SockJS 为替代

支持 EventBus Bridge

Vert.x 的若干关键词

集群

基于 Hazelcast 命令

vertx run xxx -cluster 注意:若集群起在同一机器上时,

另一个集群实例的启动需要使用: -cluster-port

vertx run xxx -cluster -cluster-port 25501

Vert.x 的若干关键词

模块

运行单元: verticle vertx run verticle

复用单元:模块( Module ) Vert.x 的插件系统 模块亦可单独运行

vertx runmod mod

二者均支持动态部署 deployVerticle/undeployVerticle deployModule/undeployModule

Vert.x 应用的开发1. 建立工程

Vertx 应用即普通的 Java 工程

apply plugin: 'groovy'

vertxHome = '...'

repositories { flatDir dirs: "${vertxHome}/lib"}

dependencies { groovy localGroovy()

compile gradleApi() compile fileTree(dir: "${vertxHome}/lib", includes: ['*.jar']) runtime fileTree(dir: "${vertxHome}/lib", includes: ['*.jar'])

runtime files("${vertxHome}/conf")}

Vert.x 应用的开发2. 编写 Verticle (以 groovy 为例)

Verticle 的依赖类为普通 Java 类import org.vertx.groovy.core.buffer.Buffer

vertx.createNetClient().connect(1234, "localhost") { socket -> socket.dataHandler { buffer -> ... }

socket.closedHandler { ... }

...}

Vert.x 应用的开发3. 编译工程

4. 运行

小技巧 可使用 -instances 参数指定同时运行的 Verticle

的实例数,最大化利用 CPU 核数 Vertx 提供了 gradle 工程的应用模板

https://github.com/vert-x/vertx-gradle-template

gradle build

vertx run Server.groovy -cp ./build/libs/*.jar

开发经验 同步 -> 异步 分而治之,充分利用 Verticle 事件总线很方便,设计事件体系是关键

尤其是事件地址,专项专用 利用动态部署实现功能的动态增减 永远不要阻塞事件循环, IO 操作转移到 Worker

Verticle 例子 1 :

普通 Verticle -> 事件总线 -> Worker Verticle -> DB Server 例子 2

利用 Worker Verticle 实现连接池,在上例中部署多个 worker verticle 实例即可,每个 Worker 中保持与 DB 的连接

参考资料 官方站点: http://vertx.io/ Google vertx + 问题相关关键字

top related