活性GWT

介绍

在过去的4到5年中,反应式编程的普及程度得到了极大的提高。 这可以告诉我们,反应性应用程序的用例现在比以往任何时候都有效。 后端系统上的压力增加了,因此需要用最少的资源来处理这种压力。 响应式编程被认为是在减少资源消耗的同时提高效率和吞吐量的一种方法。 反应式编程的流行导致大多数编程语言和平台的反应式扩展的发展:GWT也不例外。 在这篇文章中,我们将提供rxjava-gwt的用法示例,它是GWT的反应性扩展。

关于rxjava-gwt

rxjava-gwt是RxJava对GWT的改编,而不是某些人可能认为的RxJ的包装器。 根据项目创建者Ignacio Baca的说法,将RxJava适配到GWT比包装RxJ更有用,尤其是如果Rx代码在客户端和服务器之间共享时,因为在此行为是完全一样的。 同样,这引入了共享自定义运算符或Rx合成的可能性。

用例

从后端的角度来看,反应式编程被视为提高效率和吞吐量,以最小的资源消耗实现请求的方法,但是前端呢? 好吧,我们知道JavaScript本质上是异步的,并且回调/ Promises的用法很常见,那么反应性又要添加什么呢? 首先,如果应用程序正在调用外部数据源(例如HTTP请求,Websocket,服务器发送的事件),则可以通过将这些源转换为流并在数据涌入时做出反应,而不是等待数据的完整性,从而使应用程序更具响应性可用。 其次,如果要执行的操作很常见,则反应式编程可以帮助将多个事件源组合到一个主流中。

假设我们要为著名的curl库创建一个简单的UI。 我们希望有三个字段(url,方法和主体数据),并且希望在键入时生成curl命令。 这看起来像是引入反应式编程的好用例,因为我们有多个事件源需要相同类型的处理。 使用传统的编程模式,我们将必须对每个事件处理程序执行相同的操作。

HTML

<div class="form-container"><label for="url">URL:</label><input id="url" type="text"></input><label for="method">Method: </label><select id="method"><option selected value="GET">GET</option><option value="POST">POST</option><option value="PUT">PUT</option><option value="DELETE">DELETE</option><option value="PATCH">PATCH</option><option value="HEAD">HEAD</option><option value="OPTIONS">OPTIONS</option><option value="CONNECT">CONNECT</option><option value="TRACE">TRACE</option></select><label for="data">Data: </label><textarea id="data"></textarea><div id="result">curl <span id="generatedCommand"></span></div></div>

HTMLInputElement urlInput = (HTMLInputElement) DomGlobal.document.getElementById("url");HTMLSelectElement methodInput = (HTMLSelectElement) DomGlobal.document.getElementById("method");HTMLTextAreaElement dataInput = (HTMLTextAreaElement) DomGlobal.document.getElementById("data");HTMLElement generatedCommand = (HTMLElement) DomGlobal.document.getElementById("generatedCommand");final String[] commands = new String[3];Observable urlStream = Observable.create((emitter) -> {urlInput.onkeyup = (event) -> {HTMLInputElement urlInputTarget = (HTMLInputElement) event.target;emitter.onNext(new Command(2, urlInputTarget.value));return null;};});Observable methodStream = Observable.create((emitter) -> {methodInput.onchange = (event) -> {HTMLSelectElement methodSelect = (HTMLSelectElement) event.target;emitter.onNext(new Command(1, "-X"+methodSelect.value));return null;};});Observable dataStream = Observable.create((emitter) -> {dataInput.onkeyup = (event) -> {HTMLTextAreaElement dataInputTarget = (HTMLTextAreaElement) event.target;emitter.onNext(new Command(3, "-d '"+dataInputTarget.value+"'"));return null;};});Observable.merge(urlStream, methodStream, dataStream).subscribe((obs) -> {commands[obs.position - 1] = obs.value;generatedCommand.textContent = String.join(" ", Stream.of(commands).filter(Objects::nonNull).collect(Collectors.toList()));});}
}

结论

rxjava-gwt为GWT开发人员打开了反应世界的大门。 我们已经看到了一些使反应式编程有意义的用例,因此GWT开发人员应该在他们的应用中尝试在其应用程序中尝试反应式模型。

  • 源代码: https : //github.com/zak905/reactive-gwt

其他例子

  • 蛇游戏: https : //github.com/ibaca/rxsnake-gwt
  • 经典突破游戏: https : //github.com/ibaca/rxbreakout-gwt
  • 绘画应用程序: https : //github.com/ibaca/rxcanvas-gwt

翻译自: https://www.javacodegeeks.com/2018/05/reactive-gwt.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/346888.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数字信号处理】卷积和乘法系列3之测不准原理

关注公号【逆向通信猿】更精彩!!! 声明:底部的小广告标签并不是博主所加!! Heisenberg测不准原理 信息在时域中的扩展(尖峰之间的距离)与其在频域中的对应扩展之间的这种关系是Heisenberg不确定性原理的一个例子。时域中的扩展(方差)乘以频域中的扩展具有不能被突破的…

【数字信号处理】卷积和乘法系列3之傅里叶变换对II

关注公号【逆向通信猿】更精彩!!! 声明:底部的小广告标签并不是博主所加!! 采样 傅里叶变换对(FT)很重要的原因是,如果有一个连续时间 (CT) 信号,则可以通过将信号乘以梳状函数来对其进行采样,产生的样本将只是尖峰处的值。采样过程产生离散时间 (DT) 信号,因为采…

使用密钥加密码加密_创建基于密码的加密密钥

使用密钥加密码加密本文讨论了创建基于密码的加密PBE密钥。 首先提醒您以前的要点–通常&#xff0c;在实际操作中&#xff0c;应将PBE密钥用作主密钥&#xff0c;该主密钥仅用于解锁工作密钥。 这具有三个主要优点&#xff1a; 您可以有多个密码&#xff0c;例如&#xff0c…

【定时同步系列8】QPSK基带调制+Gardener定时误差检测+解调误码率曲线之MATLAB并行仿真姊妹篇一

结果预览 误码率曲线 关于反馈型定时同步技术的原理已经陆陆续续讨论了好久了,涉及的各个细节内容较多,且不容易理解,整个流程框图如下所示: 符号定时同步的离散时间方法(异步) 其中, interpolator模块在博客: 【定时同步系列5】Farrow内插器结构原理和MATLAB实现 TED模…

【定时同步系列9】QPSK基带调制+Gardener定时误差检测+解调误码率曲线之MATLAB并行仿真姊妹篇二

关注公号【逆向通信猿】更精彩!!! 上一篇主要对Gardener定时算法进行了MATLAB仿真,其中插值控制字 W ( n ) W(n) W(n)作为环路滤波器的输出,采用迭代的方式进行更新,这也是《数字调制解调技术的MATLAB与FPGA实现》书中代码所采用的的方法! 对于这一点,此次采用另一种…

VS下一种很好的远线程注入的dll调试方法

一、Detorus-master的编译 下载源代码 https://github.com/microsoft/detours 用管理员身份启动 x64 Native Tools Command Prompt for VS 2017 或 x86 Native Tools Command Prompt for VS 2017 用cd命令进入到Detours-master目录下,分别运行以下命令: call "D:\Pr…

eclipse 隐藏项目_前5个有用的隐藏Eclipse功能

eclipse 隐藏项目Eclipse是野兽。 仅凭其力量才能超越其神秘感的设备。 有人将其称为连续体跨功能器 。 其他人则称它为透湿器 。 是的&#xff0c;它是如此之大&#xff0c;需要花费数年才能掌握。 然后&#xff0c;您的经理出现并告诉您&#xff1a;我们正在使用NetBeans。 …

vs2017+qt5.12 未将对象应用设置到对象的实例问题 -解决方法

环境&#xff1a;Win7 VS2017 Qt5.12 使用VS2017的 Qt VS Tools 打开Qt Example下的pro文件时出现如下错误提示&#xff1a; 在这里插入图片描述 查看.qmake.stash 文件如下&#xff1a; 在这里插入图片描述 QMAKE_CXX.QMAKE_MSC_VER 1200 这个配置是问题的根源 经过一天的艰…

使用Spring Security和OAuth 2.0保护Spring微服务架构

“我喜欢编写身份验证和授权代码。” 〜从来没有Java开发人员。 厌倦了一次又一次地建立相同的登录屏幕&#xff1f; 尝试使用Okta API进行托管身份验证&#xff0c;授权和多因素身份验证。 每个开发人员都希望能够更快&#xff0c;更有效地进行构建以支持规模。 使用Spring构…

Matlab库函数firrcos、rcosfir、rcosine和rcosdesign区别之根升余弦滤波器系数推导详解

一、根升余弦(Square root raised cosine)滤波器系数求解推导 h ( t ) = 4 R cos ⁡ ( ( 1 + R ) π t / T ) + sin

一种使用setdll+HOOK钩子技术+dll为MFC程序ProtocalTool等老旧程序打补丁的思路(含源码)

一、引言 由于工作原因,需要使用一个很老旧的软件,没有源代码,该软件在XP系统下运行正常,但是需要登录,且在win10系统下使用时IP控件运行不正常,只能输入每个数字只能输入2位数,还有一些其他问题,比如给软件添加一些编辑框,或者对软件进行 下面简单梳理一下解决这些…

访存优化_Hibernate事实:多级访存

访存优化在多个级别上检索根实体及其子关联是很常见的。 在我们的示例中&#xff0c;我们需要使用其树&#xff0c;分支和叶子加载森林&#xff0c;并且我们将尝试查看Hibernate在三种集合类型上的表现&#xff1a;集合&#xff0c;索引列表和包。 这是我们的类层次结构的样子…

基于ARM的字符串拷贝实验(嵌入式系统)

基于ARM的字符串拷贝实验 一,实验目的 1.掌握ARM汇编指令LDR、STR和B等的使用方法,完成较为复杂的存储区访问和程序分支,学会使用条件码。 2.掌握完整的ARM汇编程序结构,具备初步的程序编写能力。 3.掌握ADS1.2集成开发环境的工程建立、编译参数设置、程序编译和调试等…

用于在Synology NAS上测试Spring Boot Web应用程序的JUnit模拟文件

对于将在Synology RS815 NAS上检查备份文件的Spring Boot应用程序&#xff0c;我们希望能够轻松测试此NAS上存储的文件&#xff0c;而不必复制存储在其上的7TB。 理想情况下&#xff0c;我们希望创建相同的文件结构以在Spring开发配置文件中使用Web应用程序&#xff0c;并在J…

根据当天日期计算下一天日期

在日常编程中,经常需要根据当前计算相邻的下一个日期,以下就是这个小算法,直接上代码 // 判断是否是闰年 BOOL IsBissextileYear(int year) {if((((year%4==0) && (year%100)

利用根升余弦滤波器和整数倍内插的多相结构生成含采样频偏的过采样信号

多相表示在多抽样率信号处理中是一种基本方法,使用它可以在实现整数倍和分数倍抽取和内插时提高计算效率。 目前我能想到的应用是信号的成型滤波,需要内插,然后与低通滤波器(成型时为过采样的(根)升余弦波形)进行卷积,这个过程如果直接去计算的话,会有很多多余的乘法操作…

Spring Security with Spring Boot 2.0:使用Servlet堆栈的简单身份验证

Spring安全性是一个很好的框架&#xff0c;可节省开发人员的大量时间和精力。 此外&#xff0c;它还具有足够的灵活性&#xff0c;可以自定义并满足您的需求。 随着spring的发展&#xff0c;spring安全性也使得在项目中设置安全性变得更加容易和自举。 Spring Boot 2.0已经存在…

一种基于最大似然的语音信号混响时间(reverberation time)估计方法的MATLAB实现

基于最大似然(ML)估计器的盲RT估计-引言 混响效应是室内声学的一个重要现象,它是由声音在封闭空间中经多次反射而产生。描述混响效应强弱的一个重要参数是混响时间(Reverberation time, RT),其定义为当声源停止发声后,残余的声能在室内往复反射,经反射面吸收而强度逐渐减弱…

一种基于最大似然的语音信号混响时间(reverberation time)估计方法的纯C语言实现(姊妹篇)

基于最大似然(ML)估计器的盲RT估计-引言 混响效应是室内声学的一个重要现象,它是由声音在封闭空间中经多次反射而产生。描述混响效应强弱的一个重要参数是混响时间(Reverberation time, RT),其定义为当声源停止发声后,残余的声能在室内往复反射,经反射面吸收而强度逐渐减弱…

java与java ee_CapeDwarf – Java EE上的Google App Engine

java与java ee我有很多爱好。 从早期的Java EE规范一路走来&#xff0c;并用Java EE 7进行了“云”之旅&#xff0c;我很好奇看到新宣布的CapeDwarf项目有什么库存&#xff0c;可以在内部引入Google的平台即服务&#xff0c;提供“ Google App Engine ” 。 到目前为止的故事 …