网站首页 > 技术文章 正文
node基本介绍
NodeJs事件驱动机制
Nginx的服务原理类似,Node采用事件驱动的运行方式。不过nginx式多进程单线程,而Node通过事件驱动的方式处理请求时无需为每一个请求创建额外的线程。在事件驱动的模型当中,每一个IO工作被添加到事件队列中,线程循环地处理队列上的工作任务,当执行过程中遇到来堵塞(读取文件、查询数据库)时,线程不会停下来等待结果,而是留下一个处理结果的回调函数,转而继续执行队列中的下一个任务。这个传递到队列中的回调函数在堵塞任务运行结束后才被线程调用
前面也说过Node Async IO = CPS + Callback,这一套实现开始于Node开始启动的进程,在这个进程中Node会创建一个循环,每次循环运行就是一个Tick周期,每个Tick周期中会从事件队列查看是否有事件需要处理,如果有就取出事件并执行相关的回调函数。事件队列事件全部执行完毕,node应用就会终止。Node对于堵塞IO的处理在幕后使用线程池来确保工作的执行。Node从池中取得一个线程来执行复杂任务,而不占用主循环线程。这样就防止堵塞IO占用空闲资源。当堵塞任务执行完毕通过添加到事件队列中的回调函数来处理接下来的工作。
自己的理解
Node是一个单线程的语言,采用事件驱动和异步回调的机制。在执行代码的时候,主线程从上往下依次执行,遇到有需要回调的地方,就将此处加入到事件队列中,然后主线程继续往下走,直到运行结束以后,才去执行事件队列中的回调
node去执行事件队列中的事件时,如果遇到回调,依然是按照顺序添加进入事件队列,主线程一次往下执行,遇到回调就添加,直至执行完毕。
node是一个单线程多进程的。node进程创建一个循环,每个循环就是一个周期,在循环中会从事件队列里查看是否有事件需要处理,如果有就去除事件并执行相关的函数。对于阻塞事件的处理在幕后使用线程池来确保工作的运行,而不占用主循环流程。
由于公司使用node作为中间层的前后端分离的开发模式,,本文代码也是如此
前端页面js如下:
node层代码,由于是demo所以直接把service层代码写入contronller层:
路由配置:
亲测可正常运行,我们后端接口接收的是文件流的方式的进行上传
代码简单粗暴,大家多多的支持
猜你喜欢
- 2025-06-12 比较常见类型漏洞讲解(二):文件上传
- 2025-06-12 文件上传漏洞全面渗透姿势总结(文件上传漏洞的防御主要从以下几个方面考虑)
- 2025-06-12 Selenium上传文件有多少种方式?不信你有我全
- 2025-06-12 Spring Boot超大文件上传的正确方式
- 2025-06-12 文件太大上传不了?看这里,秒传(文件太大传不过去)
- 2025-06-12 fastapi+vue3文件上传(vue formdata上传文件)
- 2025-06-12 前端开发-文件上传,如何使用XMLHttpRequest将文件发送到后台?
- 2025-06-12 前端移动端上传图片pc端如何实时获取
- 2024-10-03 .NET Core WebAPI 基础文件上传 winform调用webapi上传文件
- 2024-10-03 SpringBoot中实现文件上传下载的三种解决方案(推荐)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- Oracle RAC (76)
- oracle恢复 (77)
- oracle 删除表 (52)
- oracle 用户名 (80)
- oracle 工具 (55)
- oracle 内存 (55)
- oracle 导出表 (62)
- oracle约束 (54)
- oracle 中文 (51)
- oracle链接 (54)
- oracle的函数 (58)
- oracle面试 (55)
- 前端调试 (52)
本文暂时没有评论,来添加一个吧(●'◡'●)