Tomcat与Vert.x的比较

30

最近几天我一直在阅读Vert.x文档。我知道Vert.x是一种多语言、单线程、非阻塞IO、模块化架构、高可扩展性的技术。

Tomcat和Vert.x之间是否还有其他显著的区别呢?

此外,我们何时应该使用Tomcat,何时应该使用Vert.x?

2个回答

41

Tomcat是一个servlet容器,它为您提供平台,帮助您开发和部署基于HTTP的应用程序,如网站或Web服务。

相比之下,Vert.x帮助您开发和部署任何类型的异步应用程序。虽然Tomcat的现代版本支持异步servlet,但Vert.x带有更多用户友好的异步API和其他好处:

  • 完整的文件系统异步API
  • TCP(服务器和客户端)
  • UDP(服务器和客户端)
  • HTTP(S)(服务器和客户端)
  • 共享数据服务(在多语言模块之间共享对象)
  • HA和集群
  • 集群范围内的消息传递(事件循环)
  • 事件总线桥接(通过SockJS将事件循环扩展到浏览器)
  • Vert.x模块不断壮大的生态系统
  • 将Vert.x嵌入旧代码的可能性
  • 利用Java库的丰富而坚实的现有生态系统(与Node.js不同,Vert.x运行在JVM上)

个人认为学习Vert.x非常有用。在工作中,我成功地重复使用了相同的知识,实现了三种非常不同的产品:零拷贝超快的Redis代理,基于JPA的REST API和反应式单页Web应用程序。

看看示例代码,非常简单明了,基本上没有样板文件。

还有一件事:你是在哪里读到Vert.x是单线程的?这不是真的!Vert.x有一个非常整洁的并发模型,确保所有核心都得到平等使用(与Node.js不同)。

享受吧!


关于“_你在哪里读到Vert.x是单线程的?_”,维基百科(https://en.wikipedia.org/wiki/Vert.x)指出“所有代码都是单线程的,从多线程编程的麻烦中解放出来”。也许我漏掉了什么,但这似乎与您在回答中所说的不兼容,也与您链接的Vert.x的Multi-Reactor模式的描述不符。是维基百科错误了,还是他们的描述完全指的是其他事情? - skomisa
3
“all code is single threaded” 的意思是没有任何一个 Verticle 可以并发执行。但在一个应用程序中可能会有多个 Verticle 和多个线程在 Vert.x 中运行。这种并发模型与 Akka 和 Erlang 中的 Actor 模式非常相似。 - sscarduzio
@sscarduzio,非常感谢您详细的回答。我有一个问题。您能否分享一些关于使用vert.x编写的应用程序在生产环境中的规模数据?我知道有许多因素会影响规模。此外,高可用性、集群和节点之间的消息传递在生产环境中的可靠性如何?您的见解将非常有帮助。 - undefined

5

Vert.x HTTP服务器可以同时监听多个端口。此外,如果您想将HTTP服务器与HTTP客户端或其他任何东西结合使用,则其并发模型比任何基于线程池的方法都要好得多。它的性能也更好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接