浅说vertx

16
浅浅 Vert.x 浅浅@foxgem

Upload: foxgem

Post on 10-Jun-2015

1.305 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: 浅说Vertx

浅说 Vert.x胡键( @foxgem )

Page 2: 浅说Vertx

我是谁 入行时间

10+ 年 社区身份

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

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

联系方式 Twitter/ 微博: @foxgem 邮箱: [email protected]

Page 3: 浅说Vertx

什么是 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

Page 4: 浅说Vertx

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

Socket Server Http Server

WebSocket SockJS

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

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

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

Page 5: 浅说Vertx

Vert.x 的若干关键词

简单

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

socket.closedHandler { … }

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

Page 6: 浅说Vertx

Vert.x 的若干关键词

多语言

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

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

Page 7: 浅说Vertx

Vert.x 的若干关键词

异步

非阻塞 建立于 Netty 之上

类 Actor 编程范式 事件

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

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

Page 8: 浅说Vertx

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]); }; });

Page 9: 浅说Vertx

Vert.x 的若干关键词

WebSocket

开箱即用的WebSocket 支持

支持 SockJS 考虑到 WebSocket 的

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

支持 EventBus Bridge

Page 10: 浅说Vertx

Vert.x 的若干关键词

集群

基于 Hazelcast 命令

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

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

vertx run xxx -cluster -cluster-port 25501

Page 11: 浅说Vertx

Vert.x 的若干关键词

模块

运行单元: verticle vertx run verticle

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

vertx runmod mod

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

Page 12: 浅说Vertx

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")}

Page 13: 浅说Vertx

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 { ... }

...}

Page 14: 浅说Vertx

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

Page 15: 浅说Vertx

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

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

Verticle 例子 1 :

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

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

Page 16: 浅说Vertx

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