「node学习笔记篇--01」

admin 2015年9月20日23:30:11评论54 views字数 2447阅读8分9秒阅读模式

前传有一天,船长莫名其妙的被拉进一个神秘的组织,为什么说“神秘”,因为他们讨论的船长我一句也听不懂~~。“弱智”了一段时间,发现组织原来是node.js大牛聚集地,为了有朝一日能与他们平起平坐,故发奋写下此篇笔记……


言归正传,让船长带领广大水手们一探node.js庐山真面目。

0x01 node.js是如何工作的?

node.js主要工作方式是使用非阻塞的,事件驱动的 I/O 操作来保持在处理跨平台 、数据密集型、实时应用时的轻巧高效。(专业=拗口-_-#)

「node学习笔记篇--01」

通俗来讲Node 的亮点在于建设高性能,高扩展性的互联网应用——因为它能够处理庞大的并且高吞吐量的并发连接。

它的工作原理是相当有趣的。传统的网络服务技术,是每个新增一个连接(请求)便生成一个新的线程,这个新的线程会占用系统内存,最终会占掉所有的可用内存。而Node.js 仅仅只运行在一个单线程中,使用非阻塞的异步I/O 调用,所有连接都由该线程处理,在libuv 的加分下,可以允许其支持数万并发连接(官方说的,没能力亲测( ̄▽ ̄))。

做一个简单计算: 普通的Web程序,新接入一个连接会占用2M内存,在有8GB RAM的系统上运行时,在传统web服务端技术下,并发连接的最大理论值则为4000 个。而Node.js 则达到了约1M 一个并发连接的拓展级别(相关证明:http://blog.caustik.com/2012/08/19/node-js-w1m-concurrent-connections/)

0x02 node.js模块

Ruby有Gems,Python有easy_install,node.js也有自己的模块管理工具——NPM,下面提到的一些模块船长在今后的学习中会慢慢提到的。

expressExpress.js,是一个简洁而灵活的node.js Web应用框架, 并且已经是现在大多数Node.js 应用的标准框 架,你已经可以在很多Node.js 的书籍中看到它了;

connect Connect 是一个Node.js 的 HTTP 服务拓展框架,提供一个高性能的“插件”集合,以中间件闻名,是 Ex- press 的基础部分之一;

socket.iosockjs– 目前服务端最流行的两个websocket 组件;

Jade 流行的模板引擎之一,并且是Express.js的默认模板引擎,其灵感来源于 HAML;

mongomongojs– 封装了 MongoDB的的各种 API;

redisRedis 的客户端函数库;

coffee-scriptCoffeeScript 编译器,允许开发者使用 Coffee 来编写他们的Node.js 程序;

underscore (lodash, lazy) – 最流行的 JavaScript 工具库 , 用于Node.js 的封装包,以及两个采取略有不同的实现 方法来获得更好性能的同行;

forever – 可能是用来确保 node 脚本持续运行的最流行的工具。

0x03 node.js的用武之地

聊天是最典型的多用户实时交互的应用。从IRC开始,有许多开源或者不开源的协议都运行在非标准端口上,而现在,使用Node.js 则可以解决这些问题——在标准的80端口运行WebSockets。

聊天应用程序是最能体现Node.js 优点的例子:轻量级、高流量并且能良好的应对跨平台设备上运行密集型数据(虽然计算能力低)。同时,聊天也是一个非常值得学习的用例,因为它很简单,并且涵盖了目前为止一个典型的Node.js 会用到的大部分解决方案。

在最简单的情况下,我们布置了一个聊天室在我们的网站上,用户可以在上面发消息,当然是一对多的形式。例如,假设总共有三个人连接到我们的网站上。

在服务端这边, 我们有一个使用 Express.js 搭建的简单站点,该站点实现了两件事

1)处理路径为‘/’的GET请求时,下发包括一个留言板以及一个发送信息的‘发送’按钮的页面

2)一个监听客户端发送新消息的 websockets 服务。

在客户端这边,我们有一个 HTML 页面,上面有个两个js 方法,一个是用于触发事件的 “发送” 按钮,这会把把输入的消 息通过 webscoket 发送,另一个方法是用 webscoket 在客户端上监听服务端来的推送(例如,其他用户发送的消息)。

「node学习笔记篇--01」

在客户端这边,我们有一个 HTML 页面,上面有个两个js 方法,一个是用于触发事件的 “发送” 按钮,这会把把输入的消息通过 webscoket 发送,另一个方法是用 webscoket 在客户端上监听服务端来的推送(例如,其他用户发送的消息)。

当有一个客户端发送消息的时候,发生的事情是:

1)浏览器上,点击发送按钮触发了js 函数,将输入框中的文字通过websocket消息发送到服务器的websocket客户端(页面初 始化加载的时候连接的)。

2)服务端的websocket组件收到消息,然后通过广播方法转发到其他所有连接的客户端。

3)通过页面上运行的websocket客户端组件,所有的客户端都能收到这条推送的新消息。接着js 处理函数可以把这个消息添加 到文字框内。

0x04 node.js小结

优点:

• 如果你不需要进行CPU密集型计算,你可以从头到尾甚至是数据库(比如MongoDB)都使用Javascript 来开发。这显著地减轻 了开发工序(包括成本)。

• 对于一个使用Node.js 作为服务端的单页应用或者websocket应用,爬虫可以收到一个完全HTML 呈现的响应,这是更为SEO友 好的。

缺点:

• 任何CPU密集型的计算都将阻碍Node.js 的反应,所以使用多线程的平台是一个更好的方法。或者,您也可以尝试向外扩展的 计算[*]。

• Node.js 使用关系型数据库依旧十分痛苦(详细见下方)。拜托了,如果你想执行关系型数据操作,请考虑别的环境:

Rails,Django 甚至ASP.NET MVC 。。。。

「node学习笔记篇--01」
长按上面的二维码可以关注我们,如果你觉得本文对你有帮助可以分享到朋友圈,谢谢




本文始发于微信公众号(inn0team):「node学习笔记篇--01」

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2015年9月20日23:30:11
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   「node学习笔记篇--01」https://cn-sec.com/archives/353610.html

发表评论

匿名网友 填写信息