飞嗨,欢迎您的光临,本博所发布之文章皆为作者亲测通过,如有错误,欢迎通过各种方式指正。(本博已于2015.12.6升级到php7,运行环境php7 php-fpm + nginx1.8.0)

上手node.js

Node.js/JS lf 4731℃ 0评论

最近在学习nodejs和python,果然是脚本语言,上手都挺快的。学一学基础语法,和内置的类/对象,就可以写些小东西了,高级语言,底层都用c/cpp封装了那么多常用的功能,学习起来还是很轻松的。

     最近真是苦逼的不得了,还好公司下周一搬到科技园去了,上班时间大大缩短,这几个星期每天上班途中需要一个半小时,苦逼苦逼苦逼,坐公交真是太苦太无聊了,于是乎利用上下班时间,这一周学习了下nodejs和python。这篇博客先来说说nodejs,python以后再写。

      初学nodejs,确实node有相当大的魅力。首先在开发人员上,有那么多前端程序员在用js操作dom/bom,在语法上就很熟悉了,node用底层语言封装了一些后端常用模块,运行在chrome v8引擎之上,速度快,开发人员广,推广起来也方便,多少js猿欢呼,也阔以搞搞后端啦。

      node最大的两个特点就是异步I/O和事件驱动架构设计,对于高并发的解决方案,传统的架构是多线程模型,为每个业务逻辑提供一个系统线程,通过系统线程切换来弥补同步时i/o调用时的时间开销。nodejs使用的是单线程模型,对于所有i/o都采用异步式的请求方式,避免了频繁的上下文切换。nodejs在执行的过程中会维护一个事件队列,程序在执行时进入事件循环等待下一个事件到来,每个异步式i/o请求完成后会被推送到事件队列,等待程序进程进行处理。nodejs的异步机制是基于事件的,所有的磁盘I/O、网络通信、数据库查询都以非阻塞的方式请求,返回的结果由事件循坏来处理。Node.js 进程在同一时刻只会处理一个事件,完成后立即进入事件循环检查并处理后面的事件。这样做的好处是,CPU 和内存在同一时间集中处理一件事,同时尽可能让耗时的I/O 操作并行执行。对于低速连接攻击,Node.js 只是在事件队列中增加请求,等待操作系统的回应,因而不会有任何多线程开销,很大程度上可以提高Web 应用的健壮性,防止恶意攻击。而事件驱动编程(Evnet-driven programming)是一种编程风格,由事件来决定程序的执行流程,事件由事件处理器(event handler)或事件回调(event callback)来处理,事件回调是当某个特定事件发生时被调用的函数,比如数据库返回了查询结果或者用户单击了一个按钮。

     nodejs确实有很多的优点,于是用nodejs做了个小小的web站点,用python定时脚本分割nginx error错误,然后用nodejs展示出来,当然,做了登陆,需要登陆了才能看。地址:http://www.feehi.com:3000/nginx。

     写node的过程中,也经常用来和php对比,一开始的时候,思路都是按照php写的,不过发现node和php相差其实很大的。现在想来,php确实也可以不需要什么框架了,php虽然有三个用途(命令行脚本、gui桌面程序、web),但是做web是php最注重的方便。php在c底层为web开发人员已经做的够多了,帮我们解析http协议的头和体消息,放到全局数组中,也分割好了cookie,封装好了session处理。然而,nodejs,只是把所有的请求信息放倒了request对象中,解析这些数据都需要自己来,所以若是没有使用nodejs框架的时候,都需要自己来分割这些字符串,获取个post/get数据还要自己解析。所以,写的小东西用了常用的express框架,web常用的解析模块用js进行了封装,也就方便多了。当然,在写node过程中,也发现一些尴尬,最印象深刻的便是异步select数据,执行第一条sql,第二条sql执行依赖第一条sql的返回,所以第二条sql必须写在第一条sql的回调函数中,如果是5条sql需要相护依赖执行,那嵌套下去,,,真是好尴尬,,,好吧,还是用async来写同步的吧……

转载请注明:飞嗨 » 上手node.js

喜欢 (1)or分享 (0)

Warning: Use of undefined constant PRC - assumed 'PRC' (this will throw an Error in a future version of PHP) in /www/wwwroot/feehi/blog.feehi.com/wp-content/themes/yusi1.0/comments.php on line 17
发表我的评论
取消评论

表情
(3)个小伙伴在吐槽
  1. :oops:
    匿名2018-05-28 10:45 回复
  2. :evil:
    匿名2017-11-15 13:31 回复
  3. :arrow:
    匿名2017-07-06 13:36 回复
粤ICP备15018643号-1