当前位置: 首页 > news >正文

最牛的网站建山西网站制作方案

最牛的网站建,山西网站制作方案,网络推广运营推广,网站及微信建设是否涉及知识产权这章我们讲回调,英文名:Beyond callbacks 一、章节覆盖: 回调函数及其限制,如网关/边缘服务示例所示 未来和承诺——链接异步操作的简单模型 响应式扩展——一个更强大的模型,特别适合组合异步事件流 Kotlin协程——…

这章我们讲回调,英文名:Beyond callbacks

一、章节覆盖:

回调函数及其限制,如网关/边缘服务示例所示
未来和承诺——链接异步操作的简单模型
响应式扩展——一个更强大的模型,特别适合组合异步事件流
Kotlin协程——对异步代码执行流的语言级支持

二、Vert.x中的回调函数是一种非阻塞的异步编程模式,用于处理异步操作的结果。在Vert.x中,回调函数通常用于处理事件,如HTTP请求和数据库查询等,其限制包括:

  1. 回调函数是非阻塞的,不能使用同步代码块或阻塞I/O操作。

  2. 回调函数的执行顺序不可预测,因为它们是异步执行的。

  3. 回调函数需要明确处理错误,不能简单地忽略异常或错误。

  4. 回调函数应该尽量轻量级,避免太复杂的逻辑和操作,以免影响整个应用程序的性能。

  5. 回调函数应该采用良好的编程约定,如命名规范和注释,以便于维护和管理。

回调地狱是指使用嵌套回调来链接异步操作,由于嵌套很深,导致代码更难以理解。对于嵌套回调,错误处理尤其困难。
虽然这是真的,但是可以很容易地为每个异步操作回调使用一个方法来缓解回调地狱,就像我们使用handleRequest、sendToSnapshot和sendResponse方法一样。每个方法只做一件事,我们避免嵌套回调。

二、Futures and promises in Vert.x

类似于:

package furtueAndprimise;import io.vertx.core.AbstractVerticle;
import io.vertx.core.Promise;public class Test extends AbstractVerticle {@Overridepublic void start(Promise<Void> startPromise) throws Exception {Promise<String> promise=Promise.promise();vertx.setTimer(5000,id->{if (System.currentTimeMillis()%2L==0L)promise.complete("ok");elsepromise.fail(new RuntimeException("Bad luck...."));});}
}

这里的异步操作是一个5秒的计时器,之后承诺就完成了。根据当前时间是奇数还是偶数,承诺以一个值完成或以一个异常失败。这很好,但我们如何从承诺中获得价值呢?
想要在结果可用时做出反应的代码需要一个future对象。

完整代码:

package furtueAndprimise;import io.vertx.core.AbstractVerticle;
import io.vertx.core.Future;
import io.vertx.core.Promise;
import io.vertx.core.Vertx;public class Test extends AbstractVerticle {@Overridepublic void start(Promise<Void> startPromise) throws Exception {Promise<String> promise=Promise.promise();vertx.setTimer(5000,id->{if (System.currentTimeMillis()%2L==0L)promise.complete("ok");elsepromise.fail(new RuntimeException("Bad luck...."));});Future<String> future = promise.future();future.onSuccess(System.out::println).onFailure(err -> System.out.println(err.getMessage()));}public static void main(String[] args) {Vertx vertx1=Vertx.vertx();vertx1.deployVerticle(new Test());}
}

用未来的方法启动HTTP服务器:

package furtueAndprimise;import io.vertx.core.AbstractVerticle;
import io.vertx.core.Handler;
import io.vertx.core.Promise;
import io.vertx.core.Vertx;
import io.vertx.core.http.HttpServerRequest;
import io.vertx.core.http.impl.Http1xServerRequestHandler;public class Test001 extends AbstractVerticle {@Overridepublic void start(Promise<Void> promise) {vertx.createHttpServer().requestHandler(requestHandler()).listen(8080).onFailure(fail->{promise.fail("失败");}).onSuccess(ok -> {System.out.println("http://localhost:8080/");promise.complete();});}Handler<HttpServerRequest> requestHandler(){return request -> {// 处理HTTP请求的逻辑// ...};}public static void main(String[] args) {Vertx vertx1 = Vertx.vertx();vertx1.deployVerticle(new Test001());}
}

与CompletionStage api的互操作性:

package furtueAndprimise;import io.vertx.core.AbstractVerticle;
import io.vertx.core.Promise;import java.util.concurrent.CompletionStage;public class Test002 extends AbstractVerticle {@Overridepublic void start() throws Exception {Promise<String> promise=Promise.promise();CompletionStage<String> cs = promise.future().toCompletionStage();cs.thenApply(String::toUpperCase).thenApply(str -> "~~~ " + str).whenComplete((str, err) -> {if (err == null) {System.out.println(str);} else {System.out.println("Oh... " + err.getMessage());}});}
}

CompositeFuture 是一种特殊的 Future,它可以包装一个 Future 列表,从而让一组异步操作并行执行;然后协调这一组操作的结果,作为 CompositeFuture 的结果

三、接下来讲响应式的扩展:

ReactiveX计划为后端和前端项目提供了一个通用的API和多种语言的实现(http://reactivex.io/)。RxJS项目为浏览器中的JavaScript应用程序提供响应式扩展,而像RxJava这样的项目则为Java生态系统提供通用的响应式扩展实现。
vertx提供了RxJava版本1和2的绑定。建议使用版本2,因为它支持背压,而版本1不支持。

单纯讲rxjava,rxjava的五种观察源:

你有时可能会读到热源和冷源。热点源是无论是否存在订阅者都要发出事件的源。冷源是在第一次订阅后才开始发出事件的源。周期计时器是热源,而要读取的文件是冷源。使用冷源,您可以获得所有事件,但使用热源,您只能获得订阅后发出的事件

四、rxjava在vertx里面集成

    1.引入依赖

      implementation("io.vertx:vertx-rx-java2:version")

    

package furtueAndprimise;import io.reactivex.Completable;
import io.reactivex.Observable;
import io.vertx.reactivex.core.AbstractVerticle;
import io.vertx.reactivex.core.RxHelper;import java.util.concurrent.TimeUnit;public class Test003 extends AbstractVerticle {@Overridepublic Completable rxStart() {Observable.interval(1, TimeUnit.SECONDS, RxHelper.scheduler(vertx)).subscribe(n -> System.out.println("tick"));return vertx.createHttpServer().requestHandler(r -> r.response().end("Ok")).rxListen(8080).ignoreElement();}
}

rxStart使用Completable而不是Future来通知部署成功。通过 ignoreElement()方法 返回一个Completable。这个例子打开一个经典的HTTP服务器,对任何请求都回复Ok。有趣的部分是AbstractVerticle的RxJava变体具有通知部署成功的rxStart(和rxStop)方法。在我们的示例中,当HTTP服务器启动时,垂直已经成功部署,因此我们返回一个Completable对象。
您可以检查前缀为rx的方法是否与为支持RxJava而生成的方法相对应。如果您检查RxJava api,您将注意到原始方法(包括回调)仍然存在。

这个例子中另一个有趣的部分是每秒发出事件的可观察对象。它本质上表现为一个Vert.X定时器可以。RxJava api中有几个操作符方法接受调度器对象,因为它们需要延迟异步任务。默认情况下,它们从自己管理的内部工作线程池回调,这就打破了vertx线程模型假设。我们总是可以经过vertx调度器,以确保事件仍在原始上下文事件循环中被回调。

五、Kotlin coroutines

引入依赖

plugins {
kotlin("jvm") version "kotlinVersion"
}
dependencies {
// (...)
implementation("io.vertx:vertx-lang-kotlin:${vertxVersion}")
implementation("io.vertx:vertx-lang-kotlin-coroutines:${vertxVersion}")
implementation(kotlin("stdlib-jdk8"))
}

一直都在讲vertx,所以Kotlin coroutines没有怎么讲,算了,我还是搞一个例子吧

import kotlin.coroutines.*;
suspend fun hello():String{delay(1000)return "Hello!"
}fun main(){runBlocking{println(hello())    //这个runBlocking  会一直等协程完成
}   

注:这个系列的截图一直都是vertx in Action 那本英文书里面的。。

http://www.yayakq.cn/news/439977/

相关文章:

  • 专业做网站建设公司怎么样网页设计主题内容
  • 杭州富阳网站建设公司国产十大erp软件
  • 常见的制作网站的工具wap站开发
  • 上海网站备案信息dw网站建设的数据库
  • 酒类公司网站模板做网站地图的步骤
  • 漯河哪里做网站自己做的网页发布
  • 北京企业建站哪家好seo营销技巧
  • 做电子相册的网站亳州电子商务网站建设公司
  • 用做网站使用的图片app下载汅api免费安卓
  • 番禺区网站设计聊城网站空间公司
  • 古建设工程造价管理协会网站简述电子商务网站的内容设计与开发
  • 南京建设银行网站首页手机页面网站开发例子
  • 个人网站模板制作教程天天想你视频免费观看西瓜
  • 福州网站建设推进百度广告 网站域名 已验证
  • 怎么做一个局域网站有域名怎么建网站
  • .net域名 可以做公司网站吗找外包开发一个小程序需要多少钱
  • 阿里云免费网站建设沧州网络运营公司
  • 怎么做电子商务的网站推广网站改版 百度
  • 百度快速收录品牌企业seo咨询
  • 个人网站的设计与实现专业论文图像处理工具外包seo服务收费标准
  • 网站seo优化有哪些爱情表白网站制作
  • 哈尔滨网站开发公司排行榜创建全国文明城市工作总结
  • 网站的切换语言都是怎么做的wordpress5.0官网
  • 洪山网站建设公司怎样在网上注册自己的公司
  • 揭阳购物网站开发设计网站建设运营合同范本
  • 网站空间模板兰州建设一个网站多少钱
  • 微餐饮网站建设用途公司做阿里巴巴网站要多少钱
  • 用php做医药网站开题报告淘宝电商需要投资多少钱
  • 网站开发工程师ppt徐州建设工程交易网招标公告查询
  • 东莞网站关键词优化怎么做关键词优化需要注意