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

玉门市住房和城乡建设局网站上海网站建设公司sky

玉门市住房和城乡建设局网站,上海网站建设公司sky,discuz和wordpress并发,苏州工业园区教育网这章我们讲回调#xff0c;英文名#xff1a;Beyond callbacks 一、章节覆盖#xff1a; 回调函数及其限制#xff0c;如网关/边缘服务示例所示 未来和承诺——链接异步操作的简单模型 响应式扩展——一个更强大的模型#xff0c;特别适合组合异步事件流 Kotlin协程——…这章我们讲回调英文名Beyond callbacks 一、章节覆盖 回调函数及其限制如网关/边缘服务示例所示 未来和承诺——链接异步操作的简单模型 响应式扩展——一个更强大的模型特别适合组合异步事件流 Kotlin协程——对异步代码执行流的语言级支持 二、Vert.x中的回调函数是一种非阻塞的异步编程模式用于处理异步操作的结果。在Vert.x中回调函数通常用于处理事件如HTTP请求和数据库查询等其限制包括 回调函数是非阻塞的不能使用同步代码块或阻塞I/O操作。 回调函数的执行顺序不可预测因为它们是异步执行的。 回调函数需要明确处理错误不能简单地忽略异常或错误。 回调函数应该尽量轻量级避免太复杂的逻辑和操作以免影响整个应用程序的性能。 回调函数应该采用良好的编程约定如命名规范和注释以便于维护和管理。 回调地狱是指使用嵌套回调来链接异步操作由于嵌套很深导致代码更难以理解。对于嵌套回调错误处理尤其困难。 虽然这是真的但是可以很容易地为每个异步操作回调使用一个方法来缓解回调地狱就像我们使用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(PromiseVoid startPromise) throws Exception {PromiseString promisePromise.promise();vertx.setTimer(5000,id-{if (System.currentTimeMillis()%2L0L)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(PromiseVoid startPromise) throws Exception {PromiseString promisePromise.promise();vertx.setTimer(5000,id-{if (System.currentTimeMillis()%2L0L)promise.complete(ok);elsepromise.fail(new RuntimeException(Bad luck....));});FutureString future promise.future();future.onSuccess(System.out::println).onFailure(err - System.out.println(err.getMessage()));}public static void main(String[] args) {Vertx vertx1Vertx.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(PromiseVoid promise) {vertx.createHttpServer().requestHandler(requestHandler()).listen(8080).onFailure(fail-{promise.fail(失败);}).onSuccess(ok - {System.out.println(http://localhost:8080/);promise.complete();});}HandlerHttpServerRequest 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 {PromiseString promisePromise.promise();CompletionStageString 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不支持。 单纯讲rxjavarxjava的五种观察源 你有时可能会读到热源和冷源。热点源是无论是否存在订阅者都要发出事件的源。冷源是在第一次订阅后才开始发出事件的源。周期计时器是热源而要读取的文件是冷源。使用冷源您可以获得所有事件但使用热源您只能获得订阅后发出的事件 四、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.hkea.cn/news/14581826/

相关文章:

  • 泰和网站制作成全视频免费高清观看在线韩剧
  • 周大福网站建设主要工作网站色彩策划
  • 为自己做的网站申请域名链接转换器
  • 湖南城乡建设部网站wordpress qq主题
  • 网站关键词建设wordpress怎么加js文件路径
  • 网站栏目定位中国储备粮管理集团有限公司
  • 除了淘宝还有哪些购物网站全国最大的外发加工网
  • 西安o2o网站设计公司枣庄网站优化
  • 网站建设专业名词sem是做什么的
  • 北京网站设计服务商桂林漓江风景区介绍
  • 网站建设最新教程门户网站建设汇报
  • 网站被镜像怎么做wordpress建的网站吗
  • 网站流量太高 如何做负载均衡深圳品牌vi设计
  • 瑞安做网站多少钱做网站副业
  • 做网站给韩国卖高仿兰州手机网站制作公司哪家好
  • 石河子市建设局网站辽宁省住房和城乡建设厅网站换了
  • 永久免费高配云服务器济南网站怎么做seo
  • 宁波建设协会网站广州网站建设学习
  • 织梦软件网站模板下载四大免费网站
  • 公司网站设计有哪些使用技巧呢企业网站的需求分析
  • 如何申请网站空间wordpress 建app
  • 做哪方面的网站好呢高端网站鉴赏
  • 银川网站公司网站栏目页排名
  • 怎样做网站排名优化wordpress 用户反馈
  • 校园网的网站建设内容响应式网站居中
  • 网站源码路径黄冈网站建设流程
  • tp框架做网站的优点宝安的医院网站建设
  • 为网站网站做代理网站集群怎么做
  • 58同城建设银行招聘网站珠海做网站公司
  • thinkphp制作网站开发网站营销方式