广告
返回顶部
首页 > 资讯 > 前端开发 > node.js >怎么提升nodejs的稳定性
  • 909
分享到

怎么提升nodejs的稳定性

2024-04-02 19:04:59 909人浏览 薄情痞子
摘要

这篇文章主要介绍怎么提升nodejs的稳定性,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! 提升nodejs稳定性的方法:1、保持良好的代码结构;2、使用

这篇文章主要介绍怎么提升nodejs的稳定性,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

提升nodejs稳定性的方法:1、保持良好的代码结构;2、使用“try~catch”来捕获异常;3、使用domain模块来处理程序的异常;4、使用log4js模块记录日志;5、使用forever模块管理nodejs。

教程操作环境:windows7系统、nodejs 12.19.0版,DELL G3电脑。

提高nodejs程序的稳定性,健壮性

在网上看到一些帖子,吐糟,质疑nodejs 程序的稳定性,为什么呢?其一,可能这个和javascript有关吧,node是拿javascript去实现的,而javascript又被称为是“世界上误解最深的语言”,我们可以去看看nodejs 创始人的说法,可以去看看知乎的这篇文章,为什么node 用javascript去实现,其二,nodejs 毕竟还年轻,而且官网在部分模块也标注了此模块的目前的状态。

这2天我抽了点时间思考了下这个问题,我觉得我们程序首先功能应该是独立的,就是一个功能出异常了,不应该去影响另外一个正常的功能,不应该将整个程序都崩溃掉,其次,即使是程序崩溃了,我们也应该有一个让程序自动启动,另外,应该去记录日志,方便我们跟踪问题。我觉得主要可以从以下方面提高nodejs 稳定性:

1)保持良好的代码结构:

我们知道node是单线程,非阻塞io,默认就是异步,通过回调的方式处理后面的流程,如果嵌套的层次太多了,势必会引起代码逻辑结构的混乱,也不利于维护和升级,可以采用async这个异步流程控制模块,来理清我们的代码逻辑。

2)使用 process.on('uncaughtException', function(err){...}); 来处理未被捕捉的错误。

3)使用try~catch 来捕获异常:

这个只能解决一部分问题,不是万能的,在上面说到因为node是单线程,非阻塞io,默认就是异步,通过回调的方式处理后面的流程,try~catch 是不能捕获的callback 里面的error的错误的,怎么捕获到callback里面的错误呢 ? 可以采用domain模块

4)使用domain模块来处理程序的异常

先看看对domain的解释:domain是 EventEmitter类的一个子类。监听它的error事件来处理它捕捉到的错误。 它提供了一种方式,即以一个单一的组的形式来处理多个不同的IO操作。如果任何一个注册到domain的事件触发器或回调触发了一个‘error’事件,或者抛出一个错误,那么domain对象将会被通知到。而不是直接让这个错误的上下文从`process.on('uncaughtException')'处理程序中丢失掉,也不会致使程序因为这个错误伴随着错误码立即退出。

如何使用domain 模块呢?看一个例子:

serverDomain.run(function() {
  // 服务器在serverDomain的作用域内被创建
  Http.createServer(function(req, res) {
    // req和res同样在serverDomain的作用域内被创建
    // 但是,我们想对于每一个请求使用一个不一样的域。
    // 所以我们首先创建一个域,然后将req和res添加到这个域上。
    var reqd = domain.create();
    reqd.add(req);
    reqd.add(res);
    reqd.on('error', function(er) {
      console.error('Error', er, req.url);
      try {
        res.writeHead(500);
        res.end('Error occurred, sorry.');
      } catch (er) {
        console.error('Error sending 500', er, req.url);
      }
    });
  }).listen(1337);    
});
```

说明:首先创建一个域(domain.create()),然后将需要监控的分发器添加到该域上,最后给域绑定一个错误事件,这样就可以监控了。

再看一个例子:

var d = domain.create();
d.on('error', function(er) {
  console.error('Caught error!', er);
});
d.run(function() {
  process.nextTick(function() {
    setTimeout(function() { // 模拟几个不同的异步的东西
      fs.open('non-existent file', 'r', function(er, fd) {
        if (er) throw er;
        // 继续。。。
      });
    }, 100);
  });
});

说明:首先创建一个域,给域绑定一个错误事件,然后在域的上下文提供可以运行的函数

如果对于回调呢?可以这么使用

var d = domain.create();

function readSomeFile(filename, cb) {
  fs.readFile(filename, 'utf8', d.bind(function(er, data) {
    // if this throws, it will also be passed to the domain
    return cb(er, data ? JSON.parse(data) : null);
  }));
}

d.on('error', function(er) {
  // an error occurred somewhere.
  // if we throw it now, it will crash the program
  // with the nORMal line number and stack message.
});

当然也可以这么使用

var d = domain.create();

function readSomeFile(filename, cb) {
  fs.readFile(filename, 'utf8', d.bind(function(er, data) {
    // if this throws, it will also be passed to the domain
    return cb(er, data ? JSON.parse(data) : null);
  }));
}

d.on('error', function(er) {
  // an error occurred somewhere.
  // if we throw it now, it will crash the program
  // with the normal line number and stack message.
});

这个函数与domain.bind(callback)几乎一模一样。但是,除了捕捉被抛出的错误外,它还会拦截作为第一参数被传递到这个函数的Error对象。

5)使用log4js 模块记录日志

  log4js 是一个非常强大的日志管理工具,在可以看看GitHub这个项目https://github.com/nomiddlename/log4js-node

6)使用forever 模块来管理nodejs

  forever 是服务端管理nodejs 的一个模块,一个命令行工具,能够启动,停止app 应用。forever完全是基于命令行操作,在forever进程管理之下,创建node的子进程,通过monitor监控node子进程的运行情况,一旦文件更新,或者进程挂掉,forever会自动重启node服务器,确保应用正常运行。非常的好用.

可以关注下这个项目:https://github.com/nodejitsu/forever

但是forever 也不是万能的,也由下面这些问题:

  • 有限的监控和日志功能

  • 进程管理配置的支持差

  • 不支持集群

  • 代码库老化(意味着在升级node.js时频繁的失败)

以上是“怎么提升nodejs的稳定性”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网node.js频道!

--结束END--

本文标题: 怎么提升nodejs的稳定性

本文链接: https://www.lsjlt.com/news/88241.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么提升nodejs的稳定性
    这篇文章主要介绍怎么提升nodejs的稳定性,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! 提升nodejs稳定性的方法:1、保持良好的代码结构;2、使用...
    99+
    2022-10-19
  • 怎么提升服务器运行稳定性
    提升服务器运行稳定性的方法:1、需要及时更新服务器操作系统并打上安全补丁,避免出现系统漏洞被黑客恶意入侵;2、需要及时将服务器上不用的账号以及文件进行删除,防止出现系统资源不足的情况发生;3、需要记录服务器发生过的问题以及解决方法,当问题重...
    99+
    2022-10-21
  • 怎么提高jsp网站空间的稳定性
    提高jsp网站空间稳定性的方法:1、持续更新原创文章和外链建设,不要大规模改动网站版块,确保网站内容的稳定性;2、选择性价比高的服务...
    99+
    2023-02-08
    jsp网站空间 空间
  • PHP trait DTO:提升数据传输过程的安全性与稳定性
    摘要:在PHP开发过程中,数据传输对象(DTO)是一种常用的设计模式,用于封装和传递数据。然而,传统的DTO实现方式可能存在一些问题,如代码冗余、可维护性差等。本文将介绍一种基于trait的DTO实现方式,通过具体的代码示例,展示如何提升数...
    99+
    2023-10-21
    PHP dto trait
  • web开发中稳定提升PR值的方法
    这篇文章将为大家详细讲解有关web开发中稳定提升PR值的方法,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。PR值是用来表现网页等级的一个标准。一个网站的外部...
    99+
    2022-10-19
  • 阿里云服务器分多台提升效率与稳定性
    随着云计算的发展,阿里云服务器已经成为了许多企业的重要工具。然而,如果一台服务器出现问题,可能会对整个系统造成严重影响。为了解决这个问题,阿里云服务器已经提供了分多台的功能。本篇文章将详细介绍阿里云服务器分多台的功能以及如何使用。 阿里云服...
    99+
    2023-12-17
    阿里 多台 稳定性
  • 阿里云SLB服务器组提升业务稳定性与可扩展性
    随着互联网技术的发展,业务规模的不断扩大,对服务器的需求也在不断增加。为了解决服务器数量不足、性能瓶颈、管理复杂等问题,越来越多的企业开始使用服务器集群。而阿里云SLB服务器组就是一款基于云计算技术的服务器集群解决方案,可以帮助企业提升业务...
    99+
    2023-11-19
    阿里 扩展性 稳定性
  • 容灾与容错处理:利用Go WaitGroup提升系统稳定性
    在软件开发中,容灾和容错处理是非常重要的概念,用于提高系统的稳定性和可靠性。而Go语言中的WaitGroup可以帮助我们实现容灾和容...
    99+
    2023-10-08
    Golang
  • 怎么测试内存的稳定性
    测试内存稳定性的方法:1.安装并打开鲁大师硬件检测工具;2.点击“性能测试”选项;3.勾选“内存性能”,点击“开始评测”按钮;4.等待评测完成;具体步骤如下:首先,在计算机中安装并打开鲁大师硬件检测工具;进入鲁大师主界面后,在界面中点击“性...
    99+
    2022-10-18
  • 云南虚拟主机租用怎么提高稳定性
    1.选择可靠的虚拟主机服务提供商:选择信誉好、经验丰富的虚拟主机服务提供商,可以提高虚拟主机的稳定性。2.合理规划资源使用:根据网站...
    99+
    2023-06-14
    云南虚拟主机 虚拟主机
  • 提升Go语言应用的性能与稳定性——内存优化与垃圾回收
    提升Go语言应用的性能与稳定性的一个关键方面是进行内存优化和垃圾回收。Go语言通过自动垃圾回收(GC)机制来管理内存,并通过一些优化...
    99+
    2023-10-08
    Golang
  • 怎么提升JSON.stringify()的性能
    本篇内容介绍了“怎么提升JSON.stringify()的性能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成...
    99+
    2022-10-19
  • 阿里云服务器维护事项提升服务器稳定性和安全性
    随着云计算的发展,越来越多的企业和个人选择使用阿里云服务器。然而,服务器的稳定性和安全性是企业用户关心的重点问题。本文将详细介绍阿里云服务器的维护事项,帮助用户提升服务器稳定性和安全性。 一、定期备份数据阿里云服务器提供了自动备份功能,但...
    99+
    2023-10-29
    服务器 阿里 稳定性
  • 怎么保证服务器的稳定性
    保证服务器稳定性的方法:1、需要选择优质的服务器所处机房环境;2、需要做好冗余电路措施,减少服务器受停电因素的影响;3、需要合理使用服务器系统资源,防止服务器负载过大影响正常运行;4、需要给服务器建立防火墙,提高服务器防御能力,降低服务器被...
    99+
    2022-10-12
  • 游戏高防服务器租用怎么提高稳定性
    游戏高防服务器租用提高稳定性的方法:1、保障游戏高防服务器处于良好的机房环境中,比如室内温度保持在22摄氏度,湿度保持在45%;2、搭建游戏高防服务器冗余电路措施,保障服务器能持续运作;3、避免游戏高防服务器负载过大影响服务器稳定性的情况发...
    99+
    2022-10-18
  • 怎么提升Web性能
    本篇内容介绍了“怎么提升Web性能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!为什么web性能如此重要真...
    99+
    2022-10-19
  • 怎么提升PostgreSQL性能
    本篇内容介绍了“怎么提升PostgreSQL性能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!使用Post...
    99+
    2022-10-18
  • 怎么提升css性能
    小编给大家分享一下怎么提升css性能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!提升方法: 1、将样式写在css文件中,在head中引用;2、不使用“@impo...
    99+
    2023-06-15
  • 阿里云服务器运行时间提升服务质量与稳定性
    随着云计算的快速发展,阿里云服务器作为其中的重要组成部分,其运行时间的稳定性直接影响着服务的质量。本文将从阿里云服务器的运行原理出发,探讨如何通过技术手段来提高服务器的运行时间,以及如何保障阿里云服务器的稳定性。 阿里云服务器是基于云计算技...
    99+
    2023-11-16
    阿里 服务质量 稳定性
  • 如何提高美国服务器的稳定性
    提高美国服务器稳定性的方法:1、选择机房环境好的服务商;2、冗余电路,保障停电时美国服务器能够正常运作;3、避免服务器的负载过大,因此需要对美国服务器CPU负荷进行监控,减少CPU负荷大的情况出现。机房环境好美国服务器都是存放在机房内的,所...
    99+
    2022-10-15
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作