加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

Java能抵挡住JavaScript的进攻吗?

发布时间:2019-01-31 00:22:13 所属栏目:建站 来源:码农翻身刘欣
导读:JavaScript的进攻 公元2014年,Java 第八代国王终于登上了王位。 第一次早朝,国王坐在高高的宝座上,看着毕恭毕敬的大臣,第一次体会到了皇权的威力。 德高望重的IO大臣颤悠悠地走上前来:启禀陛下,昨日收到战报,有个叫做Node.js的番邦又一次向我国进攻

“确实受到了它的启发, 但是我的Node.x在架构和一些关键的抽象上和Node.js有很大不同。” 蒂姆不好意思地笑了笑,“先说说相同的部分,既然都是异步操作,那肯定是通过事件驱动的,所以都有一个事件循环。”

Java能抵挡住JavaScript的进攻吗?

IO大臣之前和Swing大臣聊过, 知道事件循环是怎么回事,这是一个相当古老的概念了。

无非就是有个线程在检测一个队列,如果队列中有事件,就拿出来处理。

“只不过我这里有所不同,可以创建多个事件循环出来,比如每一个CPU核心有一个,这样可以充分利用CPU的多核性能。”  蒂姆得意地说道。

Java能抵挡住JavaScript的进攻吗?

(4个CPU core, 4个事件循环)

IO大臣点头表示赞许, 他听说Node.js好像只有一个主线程,没法直接利用多核的能力。想利用多核的话还得开多个进程才行。

异步操作

“你图中的那个Hanlder就是具体的业务代码所在地吧? 具体长什么样子啊,让我看看!”  IO大臣问道。

蒂姆赶紧呈上代码,这是简单的Hello World。

  1. import io.vertx.core.AbstractVerticle;  
  2. public class Server extends AbstractVerticle {  
  3.   public void start() {  
  4.     vertx.createHttpServer().requestHandler(req -> {  
  5.       req.response()  
  6.         .putHeader("content-type", "text/plain")  
  7.         .end("Hello Word!");  
  8.     }).listen(8080);  
  9.   }  

这段代码生成了一个简单的HTTP 服务器, 在8080端口监听, 每当有请求来的时候,都返回一个字符串“Hello World!”。

IO大臣一看,大为吃惊:“你这代码不需要外部容器,自己就搞了一个HTTP服务器啊?”

“是的,这样我们就完全不用Tomcat了。 我把这种类起来一个名称,叫做Verticle, 部署以后,这个Verticle就可以和一个事件循环关联了。每次有HTTP请求过来,Node.x会封装成事件,然后分派给它处理了。”

Java能抵挡住JavaScript的进攻吗?

真是个二愣子, IO大臣心想, 怪不得Tomcat对你不待见,你这个东西出来,他的位置不保啊!

IO大臣问道:“那对于数据库查询,你这个Handler,哦不,Verticle该怎么写? 查询数据库这么慢,岂不是把事件循环都阻塞了?什么事情都做不了了?”

“大人您忘了,我们这里操作必须都是异步的,查询数据库也不例外。”

蒂姆说着展示了一段代码, 通过异步的方式来查询数据库。

  1. public class DatabaseVerticle extends AbstractVerticle{  
  2.     ......  
  3.     dbClient.getConnection(ar -> {  
  4.         if (ar.succeeded()) {  
  5.             SQLConnection connection = ar.result();  
  6.             connection.query("select .. from...", res -> {   
  7.                  if (res.succeeded()) {  
  8.                    ......  
  9.                  } else {  
  10.                    ......  
  11.                  }  
  12.           });  
  13.         } else {  
  14.            ......  
  15.         }  
  16.     });  

Java能抵挡住JavaScript的进攻吗?

IO大臣感慨道:“唉,老了,真是不中用了,连异步都忘了。对了,这些个Verticle看起来都是独立的,是被不同的线程调用的,他们之间怎么进行交互啊?难道也通过共享内存的方式?”

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读