node.js那些事

node.js的那点事
 1, 长轮训 long polling ): 一种利用HTTP模拟持续连接的技巧。 具体来说,只要页面载入了,不管你需不需要服务器给你响应信息,你都会给服务器发一个Ajax请求。这个请求不同于一般的Ajax请求,服务器不会直接给你返回信息,而是它要等着,直到服务器觉得该给你发信息了,它才会响应。比如,你的好友发了一条新鲜事,服务器就会把这个新鲜事当做响应发给你的浏览器,然后你的浏览器就刷新页面了。浏览器收到响应刷新完之后,再发送一条新的请求给服务器,这个请求依然不会立即被响应。于是就开始重复以上步骤。利用这个方法,可以让浏览器始终保持等待响应的状态。虽然以上过程依然只有非持续的Http参与,但是我们模拟出了一个看似持续的连接状态(传统服务器( Apache) 每次一个新用户连到你的网站上,你的服务器就得开一个连接)
2,非阻塞
把非阻塞的服务器想象成一个loop循环,这个loop会一直跑下去。一个新请求来了,这个loop就接了这个请求,把这个请求传给其他的进程(比如传给一个搞数据库查询的进程),然后响应一个回调(callback)。完事了这loop就接着跑,接其他的请求。这样下来,服务器就不会像之前那样傻等着数据库返回结果了。
3,数据驱动
如果数据库把结果返回来了,loop就把结果传回用户的浏览器,接着继续跑。在这种方式下,你的服务器的进程就不会闲着等着。从而在理论上说,同一时刻的数据库查询数量,以及用户的请求数量就没有限制了。服务器只在用户那边有事件发生的时候才响应
4,
WebSocket技术:(长 轮询会被替代)
5,
Express(服务端框架)  
6,koa入门: 
https://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/001471087582981d6c0ea265bf241b59a04fa6f61d767f6000
7,异步嵌套
 
// 
// ajax
// 
$ . get ( 'url' ,  function ( ) {
} ,  'json' ) ;
$ . get ( 'url1' ,  function ( ) {
} ,  'json' ) ;
$ . get ( 'url2' ,  function ( ) {
} ,  'json' ) ;
// 
$ . get ( 'url' ,  function ( ) {
     $ . get ( 'url1' ,  function ( ) {
         $ . get ( 'url2' ,  function ( ) {
         } ,  'json' ) ;
     } ,  'json' ) ;
} ,  'json' ) ;
// Node.js
// 
// 
// 20 30
var  adminIndex  =  function ( params callback ) {
   storeAdmin . getApiTokens ( function ( err ,  tokens ) {
     if  (  err  )  {  callback ( err ) ;  return ;  }
     storeAdmin . getApiServices ( function ( err ,  apiServices ) {
       if  (  err  )  {  callback ( err ) ;  return ;  }
       storeAdmin . getSocketioServices ( function ( err ,  socketioServices ) {
         if  (  err  )  {  callback ( err ) ;  return ;  }
         callback ( 0 ,  {
            status  :  true ,
            data  :  {
              api_tokens  :  tokens ,
              api_services  :  apiServices ,
              socketio_services  :  socketioServices
            }
         }) ;
       }) ;
     }) ;
   }) ;
} ;
 8, Promise对象(解决异步嵌套的弊端)
 
 
var  val  =  1 ;
// step1, step2, step3ajax
// Node.js
// 
// step1step2step3
function  step1 ( resolve reject )  {
     console . log ( '' ) ;
     if  ( val  >=  1 )  {
         resolve ( 'Hello I am No.1' ) ;
     }  else  if  ( val  ===  0 )  {
         reject ( val ) ;
     }
}
function  step2 ( resolve reject )  {
     console . log ( '' ) ;
     if  ( val  ===  1 )  {
         resolve ( 'Hello I am No.2' ) ;
     }  else  if  ( val  ===  0 )  {
         reject ( val ) ;
     }
}
function  step3 ( resolve reject )  {
     console . log ( '' ) ;
     if  ( val  ===  1 )  {
         resolve ( 'Hello I am No.3' ) ;
     }  else  if  ( val  ===  0 )  {
         reject ( val ) ;
     }
}
new  Promise ( step1 ) . then ( function ( val ) {
     console . info ( val ) ;
     return  new  Promise ( step2 ) ;
}) . then ( function ( val ) {
     console . info ( val ) ;
     return  new  Promise ( step3 ) ;
}) . then ( function ( val ) {
     console . info ( val ) ;
     return  val ;
}) . then ( function ( val ) {
     console . info ( val ) ;
     return  val ;
}) ;
// 
Hello  I  am  No . 1
Hello  I  am  No . 2
Hello  I  am  No . 3
Hello  I  am  No . 3
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值