nodejs 实现机制
最近在学习nodejs,作为一个从未学过javascript的程序员,把自己学习的过程贴出来,当做记录和总结吧。
1、 nodejs的原理:
nodejs完全是基于事件轮询机制的一个javascript框架,内部有维护一个事件的队列,每一个事件id对应一个响应函数,进程循环读取队列的事件,调用响应函数进行处理,注册到调用是一个异步过程,其实和c语言里面的注册回调函数,然后调用回调函数的流程一样,整个实现机制比较简单,只是使用js写出来的可能更容易上手。
2、 nodejs通过模块来实现封装性的,每一个模块就是对一些功能函数和变量的封装,通常写在一个.js文件中,例如:
封装一个做加法和减法运算的模块,math.js 如下:
exports.add = function(a, b){
return a+b;
};
exports.sub = function(a, b){
return a-b;
};
exports用来申明函数能够被其他模块外部调用,就类似于public的作用(如果不使用exports则类似于private,不能被外部调用),其他模块通过require("math"); 来引用
例如:
var sum = require("math").add(100,10);
3、nodejs中有一些内建的核心模块,这些是已经编译好的二进制文件,如http模块,require("http");
如果我们自定义模块的文件名和这个名字相同,调用的时候,也只会调用系统内建核心模块,因此请避免不要重名。
4、nodejs中有一些全局的变量可以随时调用,类似于做浏览器开发会用到的session等,例如process变量代表进程自身,console代表终端等。
console.log("hello world");
5、终端上输入使用process.stdin,默认是关闭的,需要使用process.stdin.resume(); 使用下面的方式监听数据输入:
process.stdin.on("data", function(data){
console.log(data);
});
6、Buffer模块类似于其他语言中申请的动态内存(例如c语言的malloc分配,c++的new出来的空间),可以存放各种数据,使用var buff = new Buffer(1000);申请1000字节的空间.
7、net模块负责网络通信,应该使用较多,毕竟nodejs在实时页面方面比较有优势,那么必然涉及到网络通信,这里不详细说,下节写个基于cs模式的聊天练练手吧。
8、http模块是nodejs中使用比较多的一个模块,用来处理http相关的东西,还在学习中,准备结合html5弄个实时web聊天的东西出来练练手,以后再专门总结下。
以上是对nodejs的第一个步学习总结,是一些基本的使用和常用模块的介绍,以后做详细总结。
nodejs 实现机制的更多相关文章
- NodeJS缓存机制:畅销货,就多囤一点呗
上一篇文章,我们已经实现了客户端向NodeJS服务器发出请求时,服务器从磁盘读取文件内容后,向客户端返回文件的数据.而对于爱莲(iLinkIT)的1对n的场景,即将文件共享出来之后,让多个用户同时下载 ...
- nodejs运行机制
有一天老大忽然问起我这个问题,nodejs运行机制 是怎样的?因自己对nodejs也不是很熟悉,就上网查了一下,得出结果如下: 1.简介 Node.js是一个事件驱动I/O服务端JavaScript环 ...
- 通过Anuglar Material串串学客户端开发 - NodeJS模块机制之Module.Exports
module.exports 前文讲到在Angular Material的第二个编译文件docs/gulpfile.js中却看到了一个奇怪的东西module.exports那么module.expor ...
- nodejs 事件机制
node 事件机制 一 三种定时器 NodeJS中有三种类型的定时器:超时时间.时间间隔.即时定时器 1.超时时间:setTimeout(callback,delayMilliSeconds,[a ...
- 图形验证插件,百度编辑器拓展功能,NodeJs消息机制以及聊天室
图形验证插件 网上找了很多图形验证插件,比较推荐verify.js <link rel="stylesheet" type="text/css" href ...
- nodejs事件机制
var EventEmitter = function() { this.evts = {}; }; EventEmitter.prototype = { constructor: EventEmit ...
- 【前端知识体系-NodeJS相关】对NodeJS模块机制的理解
1. CommonJS模块规范 1.1 模块引用 var math = require('math'); 1.2 模块定义 [!NOTE] 上下文提供exports对象用于导出当前模块的方法和变量,并 ...
- 【原创】分布式之数据库和缓存双写一致性方案解析(三) 前端面试送命题(二)-callback,promise,generator,async-await JS的进阶技巧 前端面试送命题(一)-JS三座大山 Nodejs的运行原理-科普篇 优化设计提高sql类数据库的性能 简单理解token机制
[原创]分布式之数据库和缓存双写一致性方案解析(三) 正文 博主本来觉得,<分布式之数据库和缓存双写一致性方案解析>,一文已经十分清晰.然而这一两天,有人在微信上私聊我,觉得应该要采用 ...
- 遇见NodeJS:JavaScript的贵人
在大家的印象中,相当长一段时间里,JavaScript是一门脚本语言,一般不能成为某个项目的担纲主角,作用只是在浏览器里帮忙校验校验输入是不是正确,响应一下鼠标.键盘事件,或者让某个HTML元素动起来 ...
随机推荐
- Codeforces295A - Greg and Array(线段树的成段更新)
题目大意 给定一个序列a[1],a[2]--a[n] 接下来给出m种操作,每种操作是以下形式的: l r d 表示把区间[l,r]内的每一个数都加上一个值d 之后有k个操作,每个操作是以下形式的: x ...
- ServletContext获取项目真实路径
import javax.servlet.ServletContext; import org.springframework.web.context.ServletContextAware; /** ...
- 第三周作业、实时操作系统µC/OS介绍及其它内容
作业要求 见<实时控制软件设计>第三周作业 1 阅读笔记--µC/OS 1.1 基本介绍 µC/OS是由Micrium公司研发的实时操作系统,以µC/OS-II或µC/OS-III为内核, ...
- Wix#可以直接写C#代码来生成Wix的MSI安装文
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:Wix#可以直接写C#代码来生成Wix的MSI安装文.
- redis缓存技术
初学redis缓存技术,如果文章写得不好还请谅解 应用环境:win7 实现环境:cmd,eclipse redis缓存技术的特点就在于高效,因为目前涉及的数据量逐渐增多,在对于数据的存储上面和sql以 ...
- HDU 3333 & 3874 (线段树+离线询问)
两个题目都是求区间之内,不重复的数字之和,3333需要离散化处理................. 调试了一下午........说多了都是泪........... #include <iostr ...
- Ubuntu下开启root登陆
亲手安装过Ubuntu的童鞋都知道,默认安装只会添加一个普通用户名和密码,而超级用户权限则是利用sudo命令来执行.在Ubuntu下使用root登陆或者在shell中用su命令切换到root时会提示错 ...
- MHA工作原理
http://my.oschina.net/u/1440383/blog/313798?fromerr=Tvth3ODF
- insert例子
11.20 使用insert代替下标操作. #include<iostream> #include<map> #include<string> #include&l ...
- Ubuntu远程桌面xrdp方法
xrdp方式,该方法支持多用户登录并远程桌面. 首先在Ubuntu上安装GNOME界面,在终端输入命令: sudo apt-get install gnome-panel 安装完成后注销用户. 点击自 ...