- 一、NodeJS 介绍
- 二、HTTP 模块、URL 模块 supervisor 工具
- 三、CommonJs 和 Nodejs 模块
- 四、NPM 第三方模块和 package
- 五、fs 模块
- 六、创建一个 WEB 服务器
- 七、Nodejs 的非阻塞 I/O、异步、事件驱动
- 八、静态文件托管 GET POST 路由 EJS 模板引擎
- 九、MongoDb 数据库介绍、安装、使用
- 十、MongoDB 数据库创建删除、表(集合)创建删除、数据增删改查
- 十一、MongoDB 索引 explain 分析查询速度
- 十二、nodejs 操作 mongodb3.x 数据库的方法
- 十三、NodeJs 操作 MongoDb 数据库 数据的增加 修改 删除
- 十四、Express 安装和使用
- 十五、express 中间件 cookie 的基本使用
- 十六、express 中间件 express-session 常见参数配置使用
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
七、Nodejs 的非阻塞 I/O、异步、事件驱动
7.1 Nodejs 的单线程 非阻塞 I/O 事件驱动
- 在 Java、PHP 或者.net 等服务器端语言中,会为每一个客户端连接创建一个新的线程。 而每个线程需要耗费大约 2MB 内存。也就是说,理论上,一个 8GB 内存的服务器可以同时 连接的最大用户数为 4000 个左右。要让 Web 应用程序支持更多的用户,就需要增加服务器 的数量,而 Web 应用程序的硬件成本当然就上升了
- Node.js 不为每个客户连接创建一个新的线程,而仅仅使用一个线程。当有用户连接了, 就触发一个内部事件,通过非阻塞 I/O、事件驱动机制,让 Node.js 程序宏观上也是并行的。 使用 Node.js,一个 8GB 内存的服务器,可以同时处理超过 4 万用户的连接。
7.2 Nodejs 回调处理异步
//错误的写法: function getData(){ //模拟请求数据 var result=''; setTimeout(functio n (){ result='这是请求到的 数据' },200); return result; } console .log(getData());/*异步导致请求不到数据*/
//正确的处理异步: function getData(callback) { //模拟请求数据 var result = ''; setTimeout(function() { result = '这是请求到的 数据'; callback(result); }, 200); } getData(function(data) { console.log(data); })
7.3 Nodejs events 模块处理异步
Node.js
有多个内置的事件,我们可以通过引入events
模块,并通过实例化EventEmitter
类来绑定和监听事件。
// 引入 events 模块 var events = require('events'); var Even tEmitter =new event s .EventEmitter() ; /*实例化事件对象*/ EventEmitter.on('toparent',function(){ console.log('接收到了广播事件'); }) setTimeout(function (){ console.log('广播'); EventEmitter.emit('toparent' ); /*发送广播*/ },1000)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论