哪一个更好?Spring boot还是Node.js
前言
本篇文章有些与众不同,由于我自己手头有些关于这个主题的个人经验,受其启发写出此文。虽然SpringBoot和Node.js服务于很不一样的场景,但是这两个框架共性惊人。其实每种语言都有不计其数的框架,但仅仅一部分是真正卓越的。如果咱们想,你和我也能创造我们自己的框架,并面向公众发布。然而,它们中极少数可以依赖社区脱颖而出,需要很强的可用性才行。

本文将聚焦于使用SpringBoot和Node.js的优势,当然也覆盖了它们的基础概念。
Spring Boot
简单讲,Spring Boot是一个可以创建Web应用和服务的Java框架。它基于Spring框架,在配置和部署方面与Spring应用程序集成便捷。Spring Boot有很多开发和部署企业级应用的便捷特性,诸如:
- Web服务器(比如Tomcat和Jetty)是嵌入在应用里面的,而不是把应用部署到一个外部Web服务器。
- 日志和安全等通用的开发任务,拥有内置支持。
- 在Spring Boot项目快速开发中,有批处理脚本的支持。
简单来说,Spring Boot是一个为了创建基于Spring应用程序的框架,这些程序在生产环境中无需额外的配置即可使用,并且独立运行。
实现
为了解释使用Spring Boot来实现一个RESTful web服务,请看下面的例子
@RestController
@RequestMapps("/hello")
public class HelloController {
@GetMapping
public String sayHello() {
return "Hello, Spring Boot!";
}
}
用@RestController和@RequestMapping("/hello")注解的类表名这是一个controller。Web服务的终端可以用@RestController注解来定义,HTTP请求会被映射到controller类里的单独方法,使用@RequestMapping注解即可。
用@GetMapping来注解sayHello,可以让它对应到"/hello"终端的GET请求。在这个例子中,客户端得到的响应是方法返回值,即"Hello,SpringBoot"字符串。
这个应用程序需要在主类中添加@SpringBootApplication注解,并且classpath里面需要有Spring Boot starter web的依赖。
@SpringBootApplication
public class SpringBootExampleApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootExampleApplication.class, args);
}
}
在我们的应用程序中运行,并在在内嵌的web服务器(比如Tomcat)运行。到http://localhost:8080/hello的GET请求会抵达web服务并返回Hello, Spring Boot!
Node.js
Node.js允许在web浏览器外执行JavaScript代码,并且是一个在很多计算平台可以使用的开源软件。他为开发者在服务器通过使用JavaScript创建可伸缩和高性能网络应用铺平了道路。由于Node.js的轻量、高效的事件驱动、非阻塞I/O模型,Node.js是在大量不同类型的分布式设备运行数据密集型实时应用的理想选择。
为了高效率运行JavaScript代码,Node.js是基于Google的V8 JavaScript引擎的。Node.js运行时库是平台不可分割的一部分,为大量不同类型的服务端和网络应用提供了构建模块。
如果你用Node.js构建Web应用,你可以用JavaScript来开发用户界面和底层代码。另外,Node.js身后拥有庞大和充满活力的社区,它已经创造了一个一个开源软件和模块的丰富生态系统,这些都可以和应用很方便地集成。
Web服务器、实时聊天程序和其他各种类型的网络应用,只是Node.js的一部分常见应用。RESTful API、实时网络应用和命令行工具只是常见应用的一些例子。
总而言之,Node.js是一个高效的、快速的、社区支持的JavaScript运行时,使得开发者可以在服务器环境中部署JavaScript。
实现
一个基础的Node.js web 服务器如下所示
const http = require('http');
const server = http.createServer((req,res) => {
res.statusCode=200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello, Node.js!\n');
});
server.listen(3000, () => {
console.log('Server running at http://localhost:3000/');
});
这个代码使用内置的Node.js http模块来创建一个HTTP服务器。这个服务器使用createServer方法初始化创建,接着无论何时服务器收到请求,都调用一个传递给它的回调函数。
在回调方法中,我们告诉客户端响应是"text/plain"类型,文本为"Hello, Node.js!",状态码是200。
当这一切都准备好了,我们使用监听方法发布到服务器,并且告诉它开始在端口3000上监听。为了让管理员知道服务器已经启动并且运行,无论什么时候服务器只要起来了,终端就会打印出一个信息。
启动web浏览器,访问http://localhost:3000来测试服务器。浏览器窗口将会显示"Hello, Node.js!"。
尽管这是一个非常基础的例子,但它展示了Node.js服务器程序是如何构成的。有很多Node.js的模块构成开发特定应用的基础设施。他们是的你能够构建复杂程序。
最后的思考
无论你为搭建应用选择Spring Boot还是Node.js,这两个都是各自语言中非常强大的框架。他们很流行、构建应用也简单。两个都支持微服务架构,两个都可以用自己的方式构建微服务,并且把他们集成到应用里面。不管你如何使用它们,它们始终能给你一种更好的编程方式。在当前世界中,我坚信没有比Spring Boot更加敏捷和流行的框架,也没有比Node.js在服务端实现更加高效的软件。
扩展链接:
哪一个更好?Spring boot还是Node.js的更多相关文章
- Node.js 在 PayPal实战
之前有过一个谈了很多关于PayPal移动到node.js的一个应用平台.作为设置我的免费用户界面的第1部分的延续,我很高兴地说,这些传言是真的,我们的Web应用程序正在从Java迁移到JavaScri ...
- Springboot 系列(五)Spring Boot web 开发之静态资源和模版引擎
前言 Spring Boot 天生的适合 web 应用开发,它可以快速的嵌入 Tomcat, Jetty 或 Netty 用于包含一个 HTTP 服务器.且开发十分简单,只需要引入 web 开发所需的 ...
- [浅学] 1、Node.js尝试_安装&运行第一个helloworld
官网:https://nodejs.org/ 介绍:Node.js® is a platform built on Chrome's JavaScript runtime for easily bui ...
- node js学习(一)
1.简介 JavaScript是一种运行在浏览器的脚本,它简单,轻巧,易于编辑,这种脚本通常用于浏览器的前端编程,但是一位开发者Ryan有一天发现这种前端式的脚本语言可以运行在服务器上的时候,一场席卷 ...
- [转]ReactPHP── PHP版的Node.js
FROM : http://www.csdn.net/article/2015-10-12/2825887 摘要:ReactPHP作为Node.js的PHP版本.在实现思路,使用方法,应用场景上的确有 ...
- 为什么要使用 Node.js
这是一个移动端工程师涉足前端和后端开发的学习笔记,如有错误或理解不到位的地方,万望指正. Node.js 是什么 传统意义上的 JavaScript 运行在浏览器上,这是因为浏览器内核实际上分为两个部 ...
- Node.js的颠覆者:PHP的Swoole扩展
最近2年Node.js很火,异步与协程是网络开发方面热门的话题.在追求新技术的同时,也应该反思下这里面存在的陷阱.Node.js确实是一门有趣好玩有个性的语言和技术,动态性,全异步回调的方 ...
- node.js 使用 UglifyJS2 高效率压缩 javascript 文件
UglifyJS2 这个工具使用很长时间了,但之前都是在 gulp 自动构建 时用到了 UglifyJS 算法进行压缩. 最近玩了一下 UglifyJS2 ,做了一个 在线压缩javascript工具 ...
- node.js 在 Express4.0 框架使用 Connect-Busboy 实现文件上传
node.js下四种post提交数据的方式 今天说分享的是其中一种,就是上传文件. Express 4.0 以后,将功能原子化,高内聚,低耦合,独立出了很多中间件 今天主要分享文件上传 对于conne ...
- node.js学习系列(一)
node.js 百度百科简介 Node.js 是一个 Javascript 运行环境(runtime).实际上它是对 Google V8 引擎进行了封装.V8 引 擎执行 Javascript 的速 ...
随机推荐
- nf_conntrack: table full, dropping packet
参考:linux 路由跟踪表满错误 nf_conntrack: table full, dropping packet 原理解决方法 说明 ping,dmesg 或者 /var/log/message ...
- 安装.NET Framework4.5以上版本受阻怎么办?
安装和卸载 .NET Framework 受阻疑难解答 - .NET Framework | Microsoft Learn Windows RT 8.1.Windows 8.1 和 Windows ...
- #Powerbi 1分钟学会利用AI,为powerbi报表进行高端颜色设计
在BI报表的设计中,配色方案往往成为一大难题,一组切合主题.搭配合理的颜色设计往往能为我们的报表,加分不少. 今天,就介绍一个AI配色的网站,利用AI为pbi报表进行配色设计. 一:网站网址 http ...
- QLabel类中的常用方法&信号
setAlignment: 按固定值方式对齐文本 Qt.AlignLeft:水平方向靠左对齐 Qt.AlignRight:水平方向靠右对齐 Qt.AlignCenter:水平方向居中对齐 Qt.Ali ...
- 王道oj/problem9(数组的输入和输出)
网址:http://oj.lgwenda.com/problem/9 思路:第一次读取数组的个数,由于数组不能动态创建,所以先创建最大值a[100] 第二次读取采用循环读取,直接将数组元素读入 最后再 ...
- python教程 入门学习笔记 第4天 数据类型 获取数据类型 字符串拼接
数据类型 1.能直接处理的基本数据类型有5个:整型.浮点型.字符串.布尔值.空 1)整型(int)=整数,例如0至9,-1至-9,100,-8180等,人数.年龄.页码.门牌号等 没有小数位的数字,是 ...
- 在不修改代码情况下解决 Chrome 浏览器跨域
前言: 在前后台分离的项目,跨域是经常遇到的问题了.是实际解决方案中,大部分采用服务端配置,而如果只是调试,可以通过配置 Chrome 浏览器实现跨域,以下以 NodeJs 服务为例. 开始: 1. ...
- 概率dp_C++详解
引入 概率 DP 用于解决概率问题与期望问题,建议先对概率和期望的内容有一定了解.一般情况下,解决概率问题需要顺序循环,而解决期望问题使用逆序循环,如果定义的状态转移方程存在后效性问题,还需要用到 高 ...
- Room组件的用法
一.Android官方ORM数据库Room Android采用Sqlite作为数据库存储.但由于Sqlite代码写起来繁琐且容易出错,因此Google推出了Room,其实Room就是在Sqlite上面 ...
- mysql 大表如何ddl 👑
大家好,我是蓝胖子,mysql对大表(千万级数据)的ddl语句,在生产上执行时一定要千万小心,一不小心就有可能造成业务阻塞,数据库io和cpu飙高的情况.今天我们就来看看如何针对大表执行ddl语句. ...