Nodejs可以应用于那些场景?

本篇文章给大家介绍一些Nodejs的应用场景。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

Apache 的多线程高并发模式

优点:支持多线程并发

缺点:阻塞

什么是线程

线程是可以独立运行的最小的 CPU 单位,可以在同一个进程里并发运行,共享该进程下的内存地址空间。

当不同的线程需要占用同一个变量时,根据先到先得的原则,先到的线程在运作时,后来的线程只能在旁边等待,也就是加入到了阻塞排队序列。就造成了线程阻塞。

类似场景:银行柜台办理业务

NodeJS 的异步 I/O 原理

优点:高并发(最重要的优点)、适合 I/O 密集型应用

缺点:

  • 不适合CPU密集型应用(CPU密集型应用给Node带来的挑战主要是:由于JavaScript单线程的原因,如果有长时间运行的计算(比如大循环),将会导致 CPU 时间片不能释放,使得后续 I/O 无法发起)

  • 只支持单核CPU,不能充分利用CPU

  • 可靠性低,一旦代码某个环节崩溃,整个系统都崩溃
    原因:单进程、单线程
    解决方案:
    (1)Nnigx 反向代理,负载均衡,开多个进程,绑定多个端口;
    (2)开多个进程监听同一个端口,使用cluster模块
    (3)线上使用 PM2 管理进程,出现问题自动重启项目

  • Debug 不方便,错误没有 stack trace

NodeJS 基于事件循环,每一条 NodeJS 的逻辑写在回调函数里面,回调函数在返回之后异步执行。【推荐学习:《nodejs 教程》】

NodeJS 不是没有阻塞,而是阻塞不发生在后续回调的流程,而会发生在 NodeJS 本身对逻辑的计算和处理。

NodeJS 它的所有 I/O、网络通信等比较耗时的操作,都可以交给 worker threads 执行再回调,所以很快。但 CPU 的正常操作,它只能自己操作。

类似场景:排队点餐后叫号取餐。

NodeJS 的应用场景

NodeJS 处理并发的能力强,但处理计算和逻辑的能力反而很弱。

因此,我们把复杂的逻辑运算搬到前端(客户端)完成,而 NodeJS 只需要提供异步 I/O,这样就可以实现对高并发的高性能处理。

RESTful API

这是 NodeJS 最理想的应用场景,可以处理数万条连接,本身没有太多的逻辑,只需要请求 API,组织数据进行返回即可。

它本质上只是从某个数据库中查找一些值并将它们组成一个响应。

由于响应是少量文本,入站请求也是少量的文本,因此流量不高,一台机器甚至也可以处理最繁忙的公司的 API 需求。

大量 Ajax 请求的应用

实时聊天、客户端逻辑强大的单页 APP,具体的例子比如说:本地化的在线音乐应用,本地化的在线搜索应用,本地化的在线 APP 等。

Apache 适用场景

Apache 由于其多线程高并发共享内存地址空间的特性,那就意味着如果服务器足够强大,处理器足够高核,Apache 的运作将会非常良好,所以适用于(并发)异步处理相对较少,后台计算量大,后台业务逻辑复杂的应用程序。

更多编程相关知识,请访问:编程视频!!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


kindeditor4.x代码高亮功能默认使用的是prettify插件,prettify是Google提供的一款源代码语法高亮着色器,它提供一种简单的形式来着色HTML页面上的程序代码,实现方式如下: 首先在编辑器里面插入javascript代码: 确定后会在编辑器插入这样的代码: <pre
这一篇我将介绍如何让kindeditor4.x整合SyntaxHighlighter代码高亮,因为SyntaxHighlighter的应用非常广泛,所以将kindeditor默认的prettify替换为SyntaxHighlighter代码高亮插件 上一篇“让kindeditor显示高亮代码”中已经
js如何实现弹出form提交表单?(图文+视频)
js怎么获取复选框选中的值
js如何实现倒计时跳转页面
如何用js控制图片放大缩小
JS怎么获取当前时间戳
JS如何判断对象是否为数组
JS怎么获取图片当前宽高
JS对象如何转为json格式字符串
JS怎么获取图片原始宽高
怎么在click事件中调用多个js函数
js如何往数组中添加新元素
js如何拆分字符串
JS怎么对数组内元素进行求和
JS如何判断屏幕大小
js怎么解析json数据
js如何实时获取浏览器窗口大小
原生JS实现别踩白块小游戏(五)
原生JS实现别踩白块小游戏(一)