浅说Vert.x
胡键(@foxgem)
我是谁
 入行时间
 10+年
 社区身份
 GroovyQ(www.groovyq.net)站长
 西安社区组织者(OpenParty、QClub西安)
 个人兴趣
 广泛……,目前专注于vertx
 联系方式
 Twitt...
什么是Vert.x?
 文艺范儿的官方定义
 Vert.x is a
lightweight, high
performance
application platform
for the JVM that's
designed for
mo...
典型的应用场景
 vertx缺省支持
 Socket Server
 Http Server
 WebSocket
 SockJS
 典型应用
 解析实时数据帧的通信
服务器
 Web服务器
 向前端屏蔽后端数据源
位置的数据...
Vert.x的若干关键词
简
单
//典型的Socket Server结构
vertx.createNetServer()
.connectHandler{ socket ->
socket.dataHandler { buffer ->
…
...
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.registe...
Vert.x的若干关键词
WebSocket
 开箱即用的
WebSocket支持
 支持SockJS
 考虑到WebSocket的
兼容性问题,推荐以
SockJS为替代
 支持EventBus
Bridge
Vert.x的若干关键词
集
群
 基于Hazelcast
 命令
 vertx run xxx -cluster
 注意:若集群起在同一机器上
时,另一个集群实例的启动需要
使用:-cluster-port
 vertx run x...
Vert.x的若干关键词
模
块
 运行单元:verticle
 vertx run verticle
 复用单元:模块(Module)
 Vert.x的插件系统
 模块亦可单独运行
 vertx runmod mod
 二者均支...
Vert.x应用的开发
1. 建立工程
 Vertx应用即普通的Java工程
apply plugin: 'groovy'
vertxHome = '...'
repositories {
flatDir dirs: "${vertxHome...
Vert.x应用的开发
2. 编写Verticle(以groovy为例)
 Verticle的依赖类为普通Java类
import org.vertx.groovy.core.buffer.Buffer
vertx.createNetClie...
Vert.x应用的开发
3. 编译工程
4. 运行
 小技巧
 可使用-instances参数指定同时运行的Verticle
的实例数,最大化利用CPU核数
 Vertx提供了gradle工程的应用模板
 https://github....
开发经验
 同步 -> 异步
 分而治之,充分利用Verticle
 事件总线很方便,设计事件体系是关键
 尤其是事件地址,专项专用
 利用动态部署实现功能的动态增减
 永远不要阻塞事件循环,IO操作转移到Worker
Vertic...
参考资料
 官方站点:http://vertx.io/
 Google vertx + 问题相关关键字
Upcoming SlideShare
Loading in …5
×

浅说Vertx

1,721 views
1,477 views

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,721
On SlideShare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
17
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

浅说Vertx

  1. 1. 浅说Vert.x 胡键(@foxgem)
  2. 2. 我是谁  入行时间  10+年  社区身份  GroovyQ(www.groovyq.net)站长  西安社区组织者(OpenParty、QClub西安)  个人兴趣  广泛……,目前专注于vertx  联系方式  Twitter/微博:@foxgem  邮箱:jianhgreat@hotmail.com
  3. 3. 什么是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
  4. 4. 典型的应用场景  vertx缺省支持  Socket Server  Http Server  WebSocket  SockJS  典型应用  解析实时数据帧的通信 服务器  Web服务器  向前端屏蔽后端数据源 位置的数据服务器  分布式消息处理器  ……
  5. 5. Vert.x的若干关键词 简 单 //典型的Socket Server结构 vertx.createNetServer() .connectHandler{ socket -> socket.dataHandler { buffer -> … } socket.closedHandler { … } socket.exceptionHandler { … } }.listen(1234)
  6. 6. Vert.x的若干关键词 多 语 言  直接支持的语言  Java  JavaScript  Ruby  Python  Groovy  为新语言的支持提供 了语言接口
  7. 7. Vert.x的若干关键词 异 步  非阻塞  建立于Netty之上  类Actor编程范式  事件  事件处理器  事件循环  事件总线  支持本地/分布式  publish,发布/订阅  send,点对点
  8. 8. 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]); }; });
  9. 9. Vert.x的若干关键词 WebSocket  开箱即用的 WebSocket支持  支持SockJS  考虑到WebSocket的 兼容性问题,推荐以 SockJS为替代  支持EventBus Bridge
  10. 10. Vert.x的若干关键词 集 群  基于Hazelcast  命令  vertx run xxx -cluster  注意:若集群起在同一机器上 时,另一个集群实例的启动需要 使用:-cluster-port  vertx run xxx -cluster -cluster- port 25501
  11. 11. Vert.x的若干关键词 模 块  运行单元:verticle  vertx run verticle  复用单元:模块(Module)  Vert.x的插件系统  模块亦可单独运行  vertx runmod mod  二者均支持动态部署  deployVerticle/undeployVerticle  deployModule/undeployModule
  12. 12. 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") }
  13. 13. 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 { ... } ... }
  14. 14. 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
  15. 15. 开发经验  同步 -> 异步  分而治之,充分利用Verticle  事件总线很方便,设计事件体系是关键  尤其是事件地址,专项专用  利用动态部署实现功能的动态增减  永远不要阻塞事件循环,IO操作转移到Worker Verticle  例子1:  普通Verticle -> 事件总线 -> Worker Verticle -> DB Server  例子2  利用Worker Verticle实现连接池,在上例中部署多个worker verticle实例即可,每个Worker中保持与DB的连接
  16. 16. 参考资料  官方站点:http://vertx.io/  Google vertx + 问题相关关键字

×