Vert.x 3.5.0.Beta1 发布,基于 JVM 的 Node 替代者
达尔文 2018年08月12日

Vert.x 3.5.0.Beta1 发布,基于 JVM 的 Node 替代者

达尔文 达尔文 发布于2018年08月12日 收藏 18

开源中国全球专享福利,云栖大会购票大返现!>>>  

 Vert.x 3.5.0.Beta1 发布了。Vert.x 是一个用于下一代异步、可伸缩、并发应用的框架,旨在为JVM提供一个Node.js的替代方案。开发者可以通过它使用JavaScript、Ruby、Groovy、Java、甚至是混合语言来编写应用。

RxJava2

首先,此版本提供了 RxJava2 API,支持其全系列类型。

除了 Single,Rxified API 还有 Completable 和 Maybe 类型

// expose Handler<AsyncResult<Void>>Completable completable = server.rxClose();

completable.subscribe(() -> System.out.println("closed"));

// expose Handler<AsyncResult<String>> where the result can be nullMaybe<String> ipAddress = dnsClient.rxLookup("www.google.com");
ipAddress.subscribe(
  value -> System.out.println("resolved to " + value),
  err -> err.printStackTrace(),
  () -> System.out.println("does not resolve"));

RxJava 使用 toObservable() 方法来扩展 Vert.x 流,RxJava2 添加了 toFlowable() 方法:

// Flowable maps to a ReadStream<Buffer>// back-pressured streamFlowable flowable = asyncFile.toFlowable();// but we still can get an Observable<Buffer>// non back-pressured streamObservable flowable = asyncFile.toObservable();

文档示例

MQTT Client

在 Vert.x 3.4 中,我们添加了 MQTT 服务器,3.5 使用 MQTT 客户端完成 MQTT 代理:

MqttClient mqttClient = MqttClient.create(vertx,   new MqttClientOptions()
     .setPort(BROKER_PORT)
     .setHost(BROKER_HOST)).connect(ar ->  if (ar.succeeded()) {
    System.out.println("Connected to a server");

    mqttClient.publish(
      MQTT_TOPIC,
      Buffer.buffer(MQTT_MESSAGE),
      MqttQoS.AT_MOST_ONCE,      false,      false,
      s -> mqttClient.disconnect(d -> System.out.println("Disconnected from server")));
  } else {
    System.out.println("Failed to connect to a server");
    ar.cause().printStackTrace();
  }
});

这里查看示例

更新内容:

下载地址:

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 开源中国社区 [http://www.oschina.net]
本文标题:Vert.x 3.5.0.Beta1 发布,基于 JVM 的 Node 替代者
分享
评论(8)
最新评论
0
吞吐牛逼
0
Dgate基于Vertx开发
0
年纪大了,基本上能看懂的,也就是jdk自带的方法了。。。。
0

引用来自“eechen”的评论

异步就是为了解决IO阻塞的问题,而IO密集型应用,JVM相比脚本的计算性能优势也体现不出来.
加上Node.js的底层是C/C++实现的libuv和V8,性能很好很稳定,不需要JVM来替代.
可以说,异步多进程的兴起,让Java的单进程带多线程加锁的编程方式显得相当地尴尬.
像PHP的Swoole,底层用C实现了HTTP和WebSocket等协议,
PHP开发者只需在对应的回调函数里填充自己的业务逻辑,不用关心底层的实现,就能获得异步高性能的支持.
不过异步回调的写法确实有些不好:
// 异步Redis客户端
$swoole_redis = new swoole_redis();
$swoole_redis->connect('127.0.0.1', 6379, function ($swoole_redis, $result) {
  if ($result) {
    $swoole_redis->set('foo', '异步Redis', function ($swoole_redis, $result) {
      if ($result) {
        $swoole_redis->get('foo', function ($swoole_redis, $result) {
          echo $result . "\n";
          $swoole_redis->close();
        });
      }
    });
  }
});
// 同步Redis客户端
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->set('foo', '同步Redis');
echo $redis->get('foo') . "\n";
$redis->close();
以上代码先后输出:
同步Redis
异步Redis
java除了操作系统api层面用c包装了下,在这里netty(vert.x的内核)大部分都是纯java代码。
而swoole基本上是c。

所以你说java的性能体现不出来是不对的,从这里已经非常明显地体现出来了,不那么容易因为性能原因而使用其它语言去实现功能。当然java光看性能确实也有短板,为了追求最大化性能,netty也做了一个c写的epoll-native模块。
0
异步就是为了解决IO阻塞的问题,而IO密集型应用,JVM相比脚本的计算性能优势也体现不出来.
加上Node.js的底层是C/C++实现的libuv和V8,性能很好很稳定,不需要JVM来替代.
可以说,异步多进程的兴起,让Java的单进程带多线程加锁的编程方式显得相当地尴尬.
像PHP的Swoole,底层用C实现了HTTP和WebSocket等协议,
PHP开发者只需在对应的回调函数里填充自己的业务逻辑,不用关心底层的实现,就能获得异步高性能的支持.
不过异步回调的写法确实有些不好:
// 异步Redis客户端
$swoole_redis = new swoole_redis();
$swoole_redis->connect('127.0.0.1', 6379, function ($swoole_redis, $result) {
  if ($result) {
    $swoole_redis->set('foo', '异步Redis', function ($swoole_redis, $result) {
      if ($result) {
        $swoole_redis->get('foo', function ($swoole_redis, $result) {
          echo $result . "\n";
          $swoole_redis->close();
        });
      }
    });
  }
});
// 同步Redis客户端
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->set('foo', '同步Redis');
echo $redis->get('foo') . "\n";
$redis->close();
以上代码先后输出:
同步Redis
异步Redis
0
这个好,赞一个
0
不错
0
正在学习
顶部