`
hmilyzhangl
  • 浏览: 44949 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

Apache+Tomcat集群

阅读更多

本文Apache+Tomcat集群配置 基于最新的Apache和Tomcat,具体是2011年4月20日最新的Tomcat和Apache集群和负载均衡配置。

准备环境

Apache

Apache http 服务器,我们利用其对 Tomcat 进行负载均衡。目前最新版本为 2.2.17 ,下载地址为 http://httpd.apache.org/download.cgi#apache22 。如下图:

 

目前已经出现 Apache2.3.11 ,但是为 beta 版本,所以没有使用。

下载后直接安装 msi 即可,如果没有其他的 http 服务器 ( iis) 则应该可以成功安装,端口即为 80 ,能够访问 http://localhost/ 说明安装成功。

Tomcat

Tocmat7 目前已经出现稳定版本的 7.0.12 Tomcat6 则为 6.0.32 。经我测试,这 2 个版本的 Apache 负载均衡配置过程都是一样的,因此下面的配置在 Tomcat6 7 集群是通用的。但是按照下面的配置,集群中 Tomcat 不能既有 Tomcat6 又有 Tomcat7 ,否则虽能够负载均衡,但不能进行 session 复制 ,不知其他方式配置的集群是否可以。

Tomcat 就不用怎么介绍了。既然在本地需要多个节点,那么需要下载 ZIP 版本的 Tomcat

JK

JK Tomcat 提供给 http 服务器的插件 ( 个人理解的 ) ,下载地址为 http://mirror.bjtu.edu.cn/apache/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.31/ 。如下图:

 

这里选择的是 mod_jk-1.2.31-httpd-2.2.3.so ,如果 http 服务器是 Apache2.0.X 版本,则必须选择 mod_jk-1.2.31-httpd-2.0.52.so ,页面下方有英文的说明,大家可以看下。

其实我也在网上看到 Apache2.2 已经集成 Tomcat 插件模块了,可以不用 JK 插件就可以实现 Tomcat 负载均衡,但也需要一些配置,而 JK 这个配置相比也不复杂,就先记录下来。

配置过程

下面就直接写过程了,我也是网络上学习的,只是总结下过程并且利用最新的 Apache Tomcat 测试了下,还是与网络上有些不同的。

修改 Apache 配置

1、 修改 httpd.conf

我的 Apache 安装在 D:\Program Files\Apache Software Foundation\Apache2.2 ,找到 conf 目录下的 httpd.conf ,在文件的最后一行添加

include "D:\Program Files\Apache Software Foundation\Apache2.2\conf\mod_jk.conf"

2 、新建 mod_jk.conf 文件,内容如下:

LoadModule jk_module modules/mod_jk-1.2.31-httpd-2.2.3.so

JkWorkersFile conf/workers.properties

# 指定那些请求交给 tomcat 处理 ,"controller" 为在 workers.propertise 里指定的负载分配控制器名

JkMount /*.jsp controller

3、 将下载的 JK 插件 mod_jk-1.2.31-httpd-2.2.3.so 复制到 Apache 安装目录的 modules 目录下。

4、 新建并编辑 workers.properties 文件,内容如下:

#server

worker.list = controller

#========tomcat1========

worker.tomcat1.port=11009

worker.tomcat1.host=localhost

worker.tomcat1.type=ajp13

worker.tomcat1.lbfactor = 1

#========tomcat2========

worker.tomcat2.port=12009

worker.tomcat2.host=localhost

worker.tomcat2.type=ajp13

worker.tomcat2.lbfactor = 1

#========tomcat3========

worker.tomcat3.port=13009

worker.tomcat3.host=192.168.0.80 // 在我的虚拟机中的,可以算远程的吧

worker.tomcat3.type=ajp13

worker.tomcat3.lbfactor = 1

 

#========controller, 负载均衡控制器 ========

worker.controller.type=lb

worker.controller.balanced_workers=tomcat1,tomcat2,tomcat3

worker.controller.sticky_session=false

worker.controller.sticky_session_force=1

#worker.controller.sticky_session=1

这里可以配置任意多个 Tomcat ,此处配置了 3 Tomat 服务器, 2 个本地, 1 个远程,所以为了它们都能够顺利启动起来,本地的服务器端口都是不同的,如果 Tomcat 不再同一机器上,没必要改端口的。

配置 Tomcat

配置 3 Tomcat 服务器,将 Tomcat 解压后复制 3 份,我将每个文件夹分别命名为 Tomcat1 Tomcat2 Tomcat3 ,修改每一份的 server.xml 配置,将 Tomcat1 中修改部分如下图:

Tomcat2 中以上部分的 server.xml 为:

Tomcat3 中以上部分的 server.xml 为:  

因为 Tomat3 在远程服务器,所以没必要改端口的,而我先进行的本地集群测试后将 Tomcat3 复制到远程服务器,所以这 3 Tomcat 端口都不同。

AJP13 connector poat jvmRoute 名称和 workers.properties 中配置对应。

由于截图面积有限,还需要保证本地 2 个本地 Tomcat 配置 server port connector http1.1 port 都不相同。

测试

建立测试项目

建立 test 项目,需要在项目的 web.xml 中添加 <distributable/>

建立 test2.jsp ,内容如下 ( 网上都用这个测试,我就省的麻烦了 )

<%@ page contentType="text/html; charset=GBK" %>

<%@ page import="java.util.*" %>

<html><head><title>Cluster App Test</title></head>

<body>

Server Info:

<%

out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>");%>

<%

  out.println("<br> ID " + session.getId()+"<br>");

  // 如果有新的 Session 属性设置

  String dataName = request.getParameter("dataName");

  if (dataName != null && dataName.length() > 0) {

     String dataValue = request.getParameter("dataValue");

     session.setAttribute(dataName, dataValue);

  }

  out.println("<b>Session 列表 </b><br>");

  System.out.println("============================");

  Enumeration e = session.getAttributeNames();

  while (e.hasMoreElements()) {

     String name = (String)e.nextElement();

     String value = session.getAttribute(name).toString();

     out.println( name + " = " + value+"<br>");

         System.out.println( name + " = " + value);

   }

%>

  <form action="test2.jsp" method="POST">

    名称 :<input type=text size=20 name="dataName">

     <br>

    :<input type=text size=20 name="dataValue">

     <br>

    <input type=submit>

   </form>

</body>

</html>

上面的测试页面就不解释了,很好理解。

Session 测试

将项目部署到 3 个服务器,然后分别启动 Apache 3 Tocmat 服务器,这些 Tomcat 启动顺序随意,然后打开 http://localhost/test/test2.jsp ,结果如下图:

F5 刷新页面,分别出现:

 

多次刷新页面的 sessionID 看是同一个 ID ,说明 session 是复制成功了。那么 session 中的存储的东西呢,在输入框中分别输入 1 1 2 2 3 3 后,显示结果如下图:  

 

 

 

 

以上的测试说明,集群中的 session 已经共享,每个集群对于同一访问均有相同的 session ,而且 session 中存储的变量也复制了。

 

节点插拔测试

插拔意思是应该保证当运行的集群中某节点中关闭或者启动时,集群正常工作并且节点能够正常工作。

下面描述测试过程了,贴图太占地方了。

关闭 Tomcat2 ,刷新页面,则不断访问 Tocmat1 Tomcat3 ,再关闭 Tomcat1 后,则只访问一个 Tomcat3 ,说明节点关闭时运行正常。

如果重启 Tomcat2 ,无论怎么刷新,始终访问 Tomcat3 ,难道 Apache 不能将请求转发给中途启动的 Tomcat2? 。。。这时利用另外台机器访问页面,发现 Tomcat2 正常,然后在刷本地页面,又可以访问 Tomcat2 了。

从上面可以看出 Apache 的负载均衡时的算法了,对于每个新来的 session Apache 按照节点配置中的 lbfactor 比重选择访问节点,如果某节点 node1 不能访问,则寻找下一可访问节点,并且将此 node1 就在该访问 session 的访问黑名单中,以后该 session 的访问直接不考虑 node1 ,即使 node1 又可以访问了。而新来的 session 是无黑名单的,如果新的 session 能够访问到 node1 了,则会将 node1 在其他所有 session 访问的黑名单删除,这样其他 session 就又能访问 node1 节点了。以上只是个人经过测试后的猜想。

经过以上测试,说明 Tomcat 集群和负载均衡已经实现了。

 

关于集群我还有些疑问,所以又测试了下,直接把结论写出来:

1. 集群下的相同的应用可以名称不同 ( 好像没必要啊 ) ,只要配置 server.xml host 下的 context 具有相同的 path 即可。

2.  如果应用名称可以不同,那么应用下内容是否可以不同呢 ( 这里考虑将不同应用通过集群看起来是一个应用,并且共享 session) ,然后集群下不同应用映射为相同的访问 path ,具有相同的路径则负载,如果某路径只某个应用具有,则一直访问该应用。可现实很骨干啊,答案是否定的,至少我以上的配置不能实现。如果访问只有某应用具有的特别路径,那么只有负载到该应用才可以访问,否则直接路径未找到的错误页面了。

 

 

 如果您看过网上其他Apache+Tomcat的集群配置,您可能有的疑问?

1.网上大部分的文章配置2个tocmat的集群,有的将workers.properties下的worker.controller.sticky_session=1,
然后tomcat1中的server.xml中的jvmRoute设置为tomcat2,将tomcat2中的jvmRoute设置为tocmat1,当然我这样设置
也成功了,但是如果3个或者更多tocmat呢,怎么设置每个tomcat的jvmRoute,我不会所以才考虑现在的配置

2.server.xml中的Cluster配置问题,网上大部分都是使用BackupManager方式,即Cluster下又粘贴了一堆配置。其实
只要将其中注释掉的<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>去掉注释就完成session的集群
复制了。只是这俩种复制采用的方式不同而已。http://tomcat.apache.org/tomcat-6.0-doc/cluster-howto.html
这页面已经说的挺清楚了,集群的session复制默认是DeltaManager,是all to all的复制,意思是将集群下1个tomcat应用下的session
对所有的集群中的节点进行复制,即使那个节点没有发布应用。显然是不好的方式,但这在小规模的集群下并没神马问题。
而采用BackupManager,就是众多网上配置那样,对于需要复制的节点设置BackupManager自然也没问题,
但是它的性能并没有DeltaManager 好使“ Downside of the BackupManager: not quite as battle tested as the delta manager”。
因此,具体怎么设置就看大家了,通常说如果不是大规模集群,就默认就好了。反正我自己翻译的就是这个意思了,希望没有误导大家。

分享到:
评论
1 楼 LinApex 2013-05-11  
你好,朋友,有没有考虑过? 前端控制器,就是 Apache 挂掉了,这时候怎么办?

相关推荐

    Elasticsearch初识与简单案例.pdf

    Elasticsearch是一个基于Lucene的分布式全文搜索引擎,提供灵活且高效的搜索和分析功能。通过HTTP请求和客户端库,用户可以索引和搜索文档,执行复杂查询,进行数据分析,并享受高亮显示等特性。其高级功能如复合查询、聚合分析、滚动搜索等,使其适用于各种数据处理和分析场景。Elasticsearch还具有强大的监控和日志功能,确保集群稳定运行。总之,Elasticsearch是企业级搜索和分析的理想选择。

    Python基于LSTM模型对全国的空气质量数据进行可视化分析预测源代码

    介绍 对全国2019年1月至2023年12月的空气质量数据进行分析,绘制时间序列图,展示每月/每季度的平均AQI变化趋势。绘制不同省份和城市的平均AQI热力图。分析不同污染物的浓度分布和趋势。绘制空气质量等级分布图。 需求说明 对空气质量数据进行数据分析,并使用LSTM模型进行预测。 安装教程 pip install jupyter pip install numpy pandas matplotlib seaborn 使用说明 在项目路径下打开终端输入jupyter notebook就行

    百问网linux桌面GUI,基于LVGL 8.x。.zip

    百问网linux桌面GUI,基于LVGL 8.x。

    基于Vue开发的XMall商城前台页面 PC端.zip

    基于Vue开发的XMall商城前台页面 PC端.zip

    2019年中国民航大学电子设计竞赛E题-自动导航运输车

    2019年中国民航大学电子设计竞赛E题-自动导航运输车 全国大学生电子设计竞赛(National Undergraduate Electronics Design Contest),试题,解决方案及源码。计划或参加电赛的同学可以用来学习提升和参考

    精灵宝可梦go游戏UI界面设计PSD源文件.zip

    游戏开发资源,游戏UI,游戏GUI,游戏图标,PSD格式,XD格式,PNG下载,源文件,可编辑下载,游戏购物充值界面,宝石,图标,PS格式,AI格式等,游戏APP

    线索二叉树的实现.doc

    (1)逻辑设计:写出抽象数据类型的定义,各个主要模块的算法,并画出模块之间的调用关系图; (2)详细设计:定义相应的存储结构并写出各函数的伪码算法。 (3)程序编码:把详细设计的结果进二步求精为程序设计语言程序。 (4)程序调试与测试:采用自底向上,分模块进行,即先调试低层函数。 (5)结果分析:程序运行结果包括正确的输入及其输出结果和含有错误的输入及其输出结果。算法的时间、空间复杂性分析; 效果表现为用户输入一串字符表示的先序序列,程序能够根据这个序列正确地建立二叉树,并通过中序线索化非递归遍历结果。这有助于验证二叉树结构和遍历算法的正确性,同时对于理解和操作二叉树数据结构非常有帮助。 程序的输出结果证明了其对二叉树操作的正确性和有效性。

    资源【STM32+HAL】SDIO模式读写SD卡

    ​ 一、准备工作 有关CUBEMX的初始化配置,参见我的另一篇blog:【STM32+HAL】CUBEMX初始化配置 二、所用工具 1、芯片: STM32F407VET6 2、IDE: MDK-Keil软件 3、库文件:STM32F4xxHAL库 三、实现功能 实现用DMA读写SD卡内容 ​

    node-v10.4.0-win-x86.zip

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    HTML5小游戏源码下载网页版游戏JS小游戏-圈泡泡游戏源码.zip

    HTML5小游戏源码下载,JS小游戏源码下载,坦克大战,驴子跳,连连看,俄罗斯方块,圈泡泡,塔防,太空战舰,愤怒的小鸟,植物大战僵尸,水果忍者,扫雷,超级玛丽,打地鼠,坦克大战,麻将等JS小游戏源码下载,游戏开发教程,网页游戏,本地直接打开就可以玩。

    node-v12.4.0-sunos-x64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v7.7.4-linux-x86.tar.gz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    蓝色大气IDC代理商分销管理系统商业平台源码 仿西部数码站.rar

    蓝色大气IDC代理商分销管理系统商业平台源码 仿西部数码站.rar蓝色大气IDC代理商分销管理系统商业平台源码 仿西部数码站.rar

    PHP开发虚拟资源在线交易平台程序源码 含多接口 支付功能.rar

    PHP开发虚拟资源在线交易平台程序源码 含多接口 支付功能.rarPHP开发虚拟资源在线交易平台程序源码 含多接口 支付功能.rar

    Delphi编程语言的深度解析

    Delphi作为一款功能强大的编程语言,以其直观易用的集成开发环境(IDE)和高效的编译器赢得了广大开发者的青睐。本文将对Delphi编程语言的特性、应用领域、编程环境、以及与其他编程语言的比较进行全面而深入的解析,并结合实际案例展示Delphi的编程实践。 Delphi是一种面向对象的编程语言,同时它也是一款可视化软件开发工具。Delphi最初由Borland公司推出,并在后续发展中被Embarcadero Technologies接手。其第一个版本发布于1995年,当时该软件还叫做Object Pascal,后来才更名为Delphi。 Delphi作为一款功能强大的编程语言,在应用程序开发领域具有广泛的应用前景。其直观易用的IDE、高效的编译器以及丰富的组件库为开发者提供了强大的支持。通过本文的解析和案例展示,我们可以看到Delphi在快速开发、跨平台性以及面向对象等方面的优势。随着技术的不断进步和需求的不断变化,相信Delphi将继续发挥其在应用程序开发领域的重要作用。

    国外游戏UI设计PSD+AI源文件12.zip

    游戏开发资源,游戏UI,游戏GUI,游戏图标,PSD格式,XD格式,PNG下载,源文件,可编辑下载,游戏购物充值界面,宝石,图标,PS格式,AI格式等,游戏APP

    node-v8.1.1-x86.msi

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v6.14.3-sunos-x64.tar.gz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v8.9.4-x86.msi

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v7.6.0-linux-armv6l.tar.gz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

Global site tag (gtag.js) - Google Analytics