Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
¸ßЧʹÓà JavaScript ±Õ°ü
 
À´Ô´£ºIBM ·¢²¼ÓÚ£º2016-6-17
  2972  次浏览      27
 

ÔÚ Node.js ÖУ¬¹ã·º²ÉÓò»Í¬ÐÎʽµÄ±Õ°üÀ´Ö§³Ö Node µÄÒì²½ºÍʼþÇý¶¯±à³ÌÄ£ÐÍ¡£Í¨¹ýºÜºÃµØÀí½â±Õ°ü£¬Äú¿ÉÒÔÈ·±£Ëù¿ª·¢Ó¦ÓóÌÐòµÄ¹¦ÄÜÕýÈ·ÐÔ¡¢Îȶ¨ÐԺͿÉÉìËõÐÔ¡£

±Õ°üÊÇÒ»ÖÖ½«Êý¾ÝÓë´¦ÀíÊý¾ÝµÄ´úÂëÏà¹ØÁªµÄ×ÔÈ»·½Ê½£¬ËüʹÓàcontinuation passing£¨ºó¼Ì´«µÝ£©×÷ΪÖ÷ÒªµÄÓïÒå·ç¸ñ¡£Ê¹Óñհüʱ£¬ÄúÔÚÒ»¸ö·â±Õ·¶Î§ÄÚ¶¨ÒåµÄÊý¾ÝÔ´¿É¹©¸Ã·¶Î§ÄÚ´´½¨µÄº¯Êý·ÃÎÊ£¬ÉõÖÁÔÚÒѾ­´ÓÂß¼­ÉÏÍ˳öÕâ¸ö·â±Õ·¶Î§Ê±Ò²ÊÇÈç´Ë¡£ÔÚº¯ÊýÊÇÒ»µÈ (first-class) ±äÁ¿µÄÓïÑÔÖУ¨±ÈÈç JavaScript£©£¬´ËÐÐΪ·Ç³£ÖØÒª£¬ÒòΪº¯ÊýµÄÉúÃüÖÜÆÚ¾ö¶¨Á˺¯Êý¿ÉÒÔ¿´µ½µÄÊý¾ÝÔªËØµÄÉúÃüÖÜÆÚ¡£ÔÚ´Ë»·¾³ÖУ¬ºÜÈÝÒ×ÓÉÓÚÊèºö¶øÔÚÄÚ´æÖб£Áô±ÈÆÚÍûµÄ¶àµÃ¶àµÄÊý¾Ý£¬ÕâÑù×öºÜΣÏÕ¡£

±¾½Ì³Ì½«½éÉÜÔÚ Node ÖÐʹÓñհüµÄ 3 ÖÖÖ÷ÒªÓÃÀý£º

1.Íê³É´¦Àíº¯Êý

2.Öм亯Êý

3.¼àÌýÆ÷º¯Êý

¶ÔÓÚÿÖÖÓÃÀý£¬ÎÒÃǶ¼ÌṩÁËʾÀý´úÂ룬²¢Ö¸³öÁ˱հüµÄÔ¤ÆÚÊÙÃüºÍÔÚÊÙÃüÄÚ±£ÁôµÄÄÚ´æÁ¿¡£´ËÐÅÏ¢¿ÉÔÚÉè¼Æ JavaScript Ó¦ÓóÌÐòʱ°ïÖúÄúÉîÈëÁ˽âÕâЩÓÃÀýÈçºÎÓ°ÏìÄÚ´æÊ¹Ó㬴Ӷø±ÜÃâÓ¦ÓóÌÐòÖеÄÄÚ´æÐ¹Â©¡£

ÔĶÁ£ºÁ˽â JavaScript Ó¦ÓóÌÐòÖеÄÄÚ´æÐ¹Â©

ÔĶÁ£ºJavaScript ÖеÄÄÚ´æÐ¹Â©Ä£Ê½

ÔĶÁ£ºÕë¶Ô IBM SDK for Node.js µÄºËÐÄת´¢µ÷ÊÔ

±Õ°üºÍÒì²½±à³Ì

Èç¹ûÄúÊìϤ´«Í³µÄ˳Ðò±à³Ì£¬ÄÇôÔÚÊ״γ¢ÊÔÁ˽âÒ첽ģÐÍʱ£¬Äú¿ÉÄÜ»áÎÊÒÔÏÂÎÊÌ⣺

1.Èç¹ûÒì²½µ÷ÓÃÒ»¸öº¯Êý£¬ÄúÈçºÎÈ·±£ÔÚµ÷ÓÃʱËüºóÃæ£¨»òÖÜΧ£©µÄ´úÂë¿ÉÒÔ´¦Àí¸Ã·¶Î§ÄڵĿÉÓÃÊý¾Ý£¿»òÕß»»¾ä»°Ëµ£¬ÄúÈçºÎʵÏÖÒÀÀµÓÚÒì²½µ÷ÓõĽá¹ûºÍ¸±×÷ÓõÄÊ£Óà´úÂ룿

2.Ö´ÐÐÒì²½µ÷Óú󣬳ÌÐò¼ÌÐøÖ´ÐÐÓëÒì²½µ÷ÓÃÎ޹صĴúÂ룬ÄúÈçºÎÔÚÒì²½µ÷ÓÃÍê³Éºó·µ»Øµ½×î³õµÄµ÷Ó÷¶Î§À´¼ÌÐøÔËÐУ¿

±Õ°üºÍ»Øµ÷¿ÉÒԻشðÕâЩÎÊÌâ¡£ÔÚ×î³£¼ûºÍ×î¼òµ¥µÄÓÃÀýÖУ¬Òì²½·½·¨²ÉÓÃÁËÒ»¸ö»Øµ÷·½·¨£¨¾ßÓÐÒ»¸ö¹ØÁªµÄ±Õ°ü£©×÷Ϊһ¸ö²ÎÊý¡£´Ëº¯Êýͨ³£ÊÇÔÚÒì²½·½·¨µÄµ÷ÓÃλÖÃÉÏÒÔÄÚÁª·½Ê½½øÐж¨ÒåµÄ£¬¶øÇҸú¯ÊýÄÜ·ÃÎÊÎ§ÈÆµ÷ÓÃλÖõķ¶Î§µÄÊý¾ÝÔªËØ£¨¾Ö²¿±äÁ¿ºÍ²ÎÊý£©¡£

¾ÙÀý¶øÑÔ£¬¿´¿´ÒÔÏ JavaScript ´úÂ룺

function outer(a) {
  var b= 20; 
  function inner(c) {
   var d = 40;
   return a * b / (d  c);
 }
 return inner;
}

var x = outer(10);
var y = x(30);

ÕâÊÇÒ»¸öʵʱµ÷ÊԻỰÖеÄͬһ¶Î´úÂëµÄ¿ìÕÕ£º

inner º¯ÊýÔÚµÚ 17 Ðе÷Óã¨Ç°ÃæÇåµ¥ÖÐµÄµÚ 11 ÐУ©²¢ÔÚµÚ 11 ÐÐÉÏÖ´ÐУ¨¸ÃÇåµ¥µÄµÚ 5 ÐУ©¡£ÔÚµÚ 16 ÐУ¨Çåµ¥ÖÐµÚ 10 ÐУ©£¬µ÷ÓÃÁË outer º¯Êý — Ëü·µ»Ø inner º¯Êý¡£ÈçÆÁÄ»½ØÍ¼Ëùʾ£¬ÔÚµÚ 17 Ðе÷ÓÃÁË inner º¯Êý²¢ÔÚµÚ 11 ÐÐÖ´ÐÐʱ£¬ËüÄܹ»·ÃÎÊËüµÄ¾Ö²¿±äÁ¿£¨c ºÍd£©ºÍouter º¯ÊýÖж¨ÒåµÄ±äÁ¿£¨a ºÍ b£© — ¾¡¹ÜÔÚµÚ 16 ÐÐÍê³É¶Ô outer º¯ÊýµÄµ÷ÓÃʱÒÑÍ˳ö outer º¯ÊýµÄ·¶Î§¡£

“Òª±ÜÃâÄÚ´æÐ¹Â©£¬ÁË½â»Øµ÷·½·¨ºÎʱºÍÔڶ೤ʱ¼äÄÚ±£³Ö¿É·ÃÎÊÐÔºÜÖØÒª¡£”

»Øµ÷·½·¨´¦ÓÚÒ»¸ö¿Éµ÷ÓÃËüµÄ״̬£¨Ò²¾ÍÊÇ˵£¬´ÓÀ¬»øÊÕ¼¯½Ç¶È£¬¿ÉÒÔ·ÃÎÊËü£©£¬ËùÒÔËü±£³ÖËüÄÜ·ÃÎʵÄËùÓÐÊý¾ÝÔªËØ´¦Óڻ״̬¡£Òª±ÜÃâÄÚ´æÐ¹Â©£¬ÁË½â»Øµ÷·½·¨ºÎʱºÍÔڶ೤ʱ¼äÄÚ±£³Ö¸Ã״̬ºÜÖØÒª¡£

×ÜÌåÉϽ²£¬±Õ°üͨ³£ÔÚÖÁÉÙ 3 ÖÖÓÃÀýÖкÜÓÐÓá£ÔÚËùÓÐÕâ 3 ÖÖÓÃÀýÖУ¬»ù±¾Ç°Ìá¶¼ÊÇÒ»ÑùµÄ£ºÒ»Ð¡¶Î¿ÉÖØÓõĴúÂ루һ¸ö¿Éµ÷Óõĺ¯Êý£©Äܹ»´¦Àí²¢¿ÉÑ¡µØ±£ÁôÒ»¸öÉÏÏÂÎÄ¡£

ÓÃÀý 1£ºÍê³É´¦Àíº¯Êý

ÔÚÍê³É´¦Àíº¯ÊýģʽÖУ¬½«Ò»¸öº¯Êý (C1) ×÷Ϊ²ÎÊý´«µÝ¸øÄ³¸ö·½·¨ (M1)£¬²¢ÔÚ M1 Íê³Éºóµ÷ÓÃC1 ×÷ΪÍê³É´¦Àíº¯Êý¡£×÷Ϊ¸ÃģʽµÄÒ»²¿·Ö£¬M1 µÄʵÏÖ¿ÉÈ·±£ÔÚ²»ÔÙÐèÒª C1 ºó£¬Ëü±£ÁôµÄ¶Ô C1 µÄÒýÓûᱻÇå³ý¡£C1 ³£³£ÐèÒªµ÷ÓàM1 µÄ·¶Î§ÖеÄÒ»¸ö»ò¶à¸öÊý¾ÝÔªËØ¡£Ìṩ¶Ô´Ë·¶Î§µÄ·ÃÎÊÄÜÁ¦µÄ±Õ°üÔÚ´´½¨ C1 Ê±¶¨Òå¡£³£¼ûµÄÒ»ÖÖ·½·¨ÊÇʹÓÃÔÚµ÷ÓàM1 µÄµØ·½ÒÔÄÚÁª·½Ê½¶¨ÒåµÄÄäÃû·½·¨¡£½á¹û»áµÃµ½Ò»¸ö C1 ±Õ°ü£¬ËüÌṩÁË·ÃÎʿɹ© M1 Ê¹ÓõÄËùÓбäÁ¿ºÍ²ÎÊýµÄÄÜÁ¦¡£

Ò»¸öʾÀýÊÇ setTimeout() ·½·¨¡£¼ÆÊ±Æ÷¹ýÆÚºó£¬µ÷ÓÃÍê³Éº¯Êý (completion function)£¬²¢Çå³ýΪ¼ÆÊ±Æ÷±£ÁôµÄÍê³Éº¯Êý (C1) ÒýÓãº

function CustomObject() {
}

function run() {
  var data = new CustomObject()
  setTimeout(function() {
    data.i = 10
  }, 100)
}
run()

Íê³Éº¯ÊýʹÓÃÀ´×Ôµ÷ÓàsetTimeout ·½·¨µÄÉÏÏÂÎĵĠdata ±äÁ¿¡£ÉõÖÁÔÚ run() ·½·¨Íê³Éºó£¬ÎªÍê³É´¦Àíº¯Êý´´½¨µÄ±Õ°üÈÔÓпÉÄÜÒýÓàCustomObject£¬¶ø²»»á¶ÔËü½øÐÐÀ¬»øÊÕ¼¯¡£

ÄÚ´æ±£Áô

±Õ°üÉÏÏÂÎÄÊÇÔÚ¶¨ÒåÍê³Éº¯Êý (C1) ʱ´´½¨µÄ£¬¸ÃÉÏÏÂÎÄÓÉ¿ÉÔÚ´´½¨ C1 µÄ·¶Î§ÖзÃÎʵıäÁ¿ºÍ²ÎÊý×é³É¡£C1 ±Õ°ü»á±£Áôµ½ÒÔÏÂʱ¿Ì£º

1.Íê³É·½·¨±»µ÷Óò¢Íê³ÉÔËÐУ¬»òÕß¼ÆÊ±Æ÷±»Çå³ý¡£

2.²»»á·¢Éú¶Ô C1 µÄÆäËûÒýÓᣣ¨¶ÔÓÚÄäÃûº¯Êý£¬Èç¹ûÂú×ã´ËÁбíÖеÄǰÊöÌõ¼þ£¬Ôò²»»á·¢ÉúÈÎºÎÆäËûÒýÓᣣ©

ͨ¹ýʹÓàChrome ¿ª·¢Õß¹¤¾ß£¬ÎÒÃÇ¿ÉÒÔ¿´µ½±íʾ¼ÆÊ±Æ÷µÄ Timeout ¶ÔÏóͨ¹ý _onTimeout×ֶζøÓµÓÐÍê³Éº¯Êý£¨´«µÝ¸ø setTimeout µÄÄäÃû·½·¨£©µÄÒýÓãº

¾¡¹Ü¼ÆÊ±Æ÷ÒѹýÆÚ£¬µ« Timeout ¶ÔÏó¡¢_onTimeout ×ֶκͱհüº¯Êý¶¼Í¨¹ý¶ÔËüÃǵÄÒ»¸öÒýÓöø±£ÁôÔÚ¶ÑÖÐ — ÔÚϵͳÖÐ¹ÒÆðµÄ³¬Ê±Ê¼þ¡£¼¤»î¼ÆÊ±Æ÷ÇÒºóÐø»Øµ÷Íê³Éʱ£¬»áɾ³ýʼþÑ­»·ÖÐµÄ¹ÒÆðʼþ¡£ËùÓÐ 3 ¸ö¶ÔÏó¶¼ÎÞ·¨ÔÙ·ÃÎÊ£¬¶øÇÒËüÃÇ·ûºÏÔÚºóÐøÀ¬»øÊÕ¼¯ÖÜÆÚÖÐÊÕ¼¯µÄÌõ¼þ¡£

Çå³ý¼ÆÊ±Æ÷ʱ£¨Í¨¹ý clearTimeout ·½·¨£©£¬»á´Ó _onTimeout ×Ö¶ÎÖÐɾ³ýÍê³Éº¯Êý£¬¶øÇÒ£¬¼´Ê¹ÓÉÓÚÖ÷º¯Êý±£ÁôÁ˶ԠTimeout ¶ÔÏóµÄÒýÓöø±£ÁôÁ˸öÔÏ󣬣¨Ö»Òª²»ÔÙ·¢Éú¶Ô¸Ãº¯ÊýµÄÆäËûÒýÓ㩸ú¯ÊýÈÔÈ»¿ÉÒÔÔÚºóÐøÀ¬»øÊÕ¼¯ÖÜÆÚÖÐÊÕ¼¯¡£

ÔÚ´ËÆÁÄ»½ØÍ¼ÖУ¬½«»á¶Ô±È´¥·¢¼ÆÊ±Æ÷֮ǰºÍÖ®ºó»ñÈ¡µÄ ¶Ñת´¢£º

#New ÁÐÏÔʾÁËÔÚת´¢Ö®¼äÌí¼ÓµÄжÔÏó£¬#Deleted ÁÐÏÔʾÁËÔÚת´¢Ö®¼äÊÕ¼¯µÄ¶ÔÏó¡£Í»³öÏÔʾµÄ²¿·ÖÏÔʾ£¬CustomObject ´æÔÚÓÚµÚÒ»¸öת´¢ÖУ¬µ«Òѱ»ÊÕ¼¯ÇÒδ°üº¬ÔÚµÚ¶þ¸öת´¢ÖУ¬Òò´ËÊÍ·ÅÁË 12 ×Ö½ÚÄÚ´æ¡£

ÔÚ´ËģʽÏ£¬×ÔÈ»µÄÖ´ÐÐÁ÷³ÌʹÄÚ´æ½ö±£Áôµ½Íê³É´¦Àíº¯Êý (C1) ½«Æä “Íê³É” ¸Ã·½·¨ (M1) µÄ¹¤×÷´¦ÀíÍê֮ʱ¡£½á¹ûÊÇ£¨Ö»Òª¼°Ê±Íê³ÉÓ¦ÓóÌÐòµ÷Óõķ½·¨£©Äú²»ÐèÒªÌØ±ð×¢Òâ±ÜÃâÄÚ´æÐ¹Â©¡£

Éè¼ÆÊµÏÖ´ËģʽµÄº¯Êýʱ£¬ÇëÈ·±£ÔÚ´¥·¢»Øµ÷ʱÇå³ýÁ˶Իص÷º¯ÊýµÄËùÓÐÒýÓá£ÕâÑù£¬¼´¿ÉÈ·±£Âú×ãʹÓÃÄúµÄº¯ÊýµÄÓ¦ÓóÌÐòµÄÄÚ´æ±£ÁôÔ¤ÆÚ¡£

ÓÃÀý 2£ºÖм亯Êý

ÔÚijЩÇé¿öÏ£¬ÄúÐèÒªÄܹ»ÒÔ¸ü¼Ó·´¸´¡¢µü´úʽºÍ³öºõÒâÁϵķ½Ê½´¦ÀíÊý¾Ý£¬ÎÞÂÛÊý¾ÝÊÇÒÔÒì²½´´½¨»¹ÊÇͬ²½·½Ê½´´½¨µÄ¡£¶ÔÓÚÕâЩÇé¿ö£¬Äú¿É·µ»ØÒ»¸öÖм亯Êý£¬¿Éµ÷Óøú¯ÊýÒ»´Î»ò¶à´ÎÀ´·ÃÎÊËùÐèµÄÊý¾Ý»òÍê³ÉËùÐèµÄ¼ÆËã¡£ÓëÍê³É´¦Àíº¯ÊýÒ»Ñù£¬ÄúÔÚ¶¨Ò庯Êýʱ´´½¨±Õ°ü£¬±Õ°üÌṩÁË·ÃÎʶ¨Òå¸Ãº¯ÊýµÄ·¶Î§Öаüº¬µÄËùÓбäÁ¿ºÍ²ÎÊýµÄÄÜÁ¦¡£

´ËģʽµÄÒ»¸öÀý×ÓÊÇÊý¾ÝÁ÷´¦Àí£¬ÆäÖзþÎñÆ÷·µ»ØÒ»´ó¿éÊý¾Ý£¬Ã¿ÊÕµ½Ò»¸öÊý¾Ý¿é£¬¾Í»áµ÷Óÿͻ§¶ËµÄÊý¾Ý½ÓÊÕÆ÷»Øµ÷¡£ÒòΪÊý¾ÝÁ÷ÊÇÒì²½µÄ£¬ËùÒÔ²Ù×÷£¨±ÈÈçÊý¾Ý»ýÀÛ£©±ØÐëÊǵü´úʽµÄ£¬²¢ÒÔÒ»ÖÖ³öºõÒâÁϵķ½Ê½Ö´ÐС£ÏÂÃæµÄ³ÌÐòÑÝʾÁ˴˳¡¾°£º

function readData() {
  var buf = new Buffer(1024 * 1024 * 100)
  var index = 0
  buf.fill('g')  //simulates real read
    
  return function() {
    index++
    if (index < buf.length) { 
      return buf[index-1]   
    } else {
      return ''
    } 
  }
}

var data = readData()
var next = data()
while (next !== '') {
  // process data()
  next = data()
}

ÔÚÕâÖÖÇé¿öÏ£¬Ö»Òª data ±äÁ¿ÈÔÔÚ·¶Î§ÖУ¬¾Í»á±£Áô buf¡£buf »º³åÇøµÄ´óС»áµ¼Ö±£Áô´óÁ¿Äڴ棬¼´Ê¹Õâ¶ÔÓ¦ÓóÌÐò¿ª·¢Õß¶øÑÔ²»ÄÇôÃ÷ÏÔ¡£ÎÒÃÇ¿ÉÒÔʹÓà Chrome ¿ª·¢Õß¹¤¾ß²é¿´´ËЧ¹û£¬ÈçÔÚÍê³É while Ñ­»·ºó»ñµÃµÄ¿ìÕÕËùʾ£º±£ÁôÁ˸ü´óµÄ»º³åÇø£¬¾¡¹Ü²»ÔÙʹÓÃËü¡£

ÄÚ´æ±£Áô

ÉõÖÁÔÚÓ¦ÓóÌÐòÍê³ÉÖм亯Êýºó£¬¶Ô¸Ãº¯ÊýµÄÒýÓÃÈÔ»áÈùØÁª±Õ°ü±£³Ö»î¶¯×´Ì¬¡£ÒªÈøÃÊý¾Ý±äµÃ¿ÉÒÔÊÕ¼¯£¬Ó¦ÓóÌÐò±ØÐëÖØÐ´´ËÒýÓà — ÀýÈç°´ÏÂÁз½Ê½ÉèÖöÔÖм亯ÊýµÄÒýÓãº

// Manual cleanup 
data = null;

´Ë´úÂëÔÊÐí¶Ô±Õ°üÉÏÏÂÎĽøÐÐÀ¬»øÊÕ¼¯¡£ÏÂÃæÕâ¸öÀ´×Ô¶Ñת´¢µÄÆÁÄ»½ØÍ¼£¨ÔÚ½« data ÉèÖÃΪnull ºó»ñÈ¡£©±íÃ÷¿ÉÒÔͨ¹ýÊÖ¶¯·ÏÆú¶Ô±£ÁôµÄÊý¾ÝÖ´ÐÐÀ¬»øÊÕ¼¯£º

Í»³öÏÔʾµÄÐбíÃ÷£¬»º³åÇøÒѱ»ÊÕ¼¯£¬ËüµÄ¹ØÁªÄÚ´æÒѱ»ÊÍ·Å¡£

ͨ³££¬¿ÉÒÔ¹¹ÔìÖм亯ÊýÀ´ÏÞÖÆÇ±ÔÚµÄÄÚ´æÐ¹Â©¡£ÀýÈ磬һ¸öÔÊÐíÔöÁ¿¶ÁÈ¡´óÊý¾Ý¼¯µÄÖм亯Êý£¬¿ÉÒÔɾ³ý¶Ô·µ»ØµÄÊý¾Ý²¿·ÖµÄÒýÓᣵ«ÔÚÕâЩÇé¿öÏ£¬Ò»¶¨Òª×¢Òâ´Ë·½·¨²»µÃ¸øÓ¦ÓóÌÐòÖвÉÓ÷ÇÖм亯Êý·½Ê½·ÃÎʸÃÊý¾ÝµÄÆäËû²¿·Ö´øÀ´ÎÊÌâ¡£

´´½¨ÊµÏÖÖмäģʽµÄ API ʱ£¬ÇëСÐĵؼǼÏÂÄÚ´æ±£ÁôÌØÕ÷£¬ÒÔ±ãÓû§Á˽âÈ·±£ËùÓÐÒýÓö¼±»·ÏÆúµÄÐèÇ󡣸üºÃµÄ·½·¨ÊÇ£¬¾¡¿ÉÄÜʵÏÖÄúµÄ API£¬Ê¹±£ÁôµÄÊý¾Ý¿ÉÔÚÖм亯ÊýÖв»ÔÙÐèÒªËüʱ±»ÊÍ·Å¡£

ÀýÈ磬±¾½ÚÖеÄǰһ¸öʾÀýÖеĺ¯Êý¿ÉÖØÐ´Îª£º

return function() {
    index++;
    if (index < buf.length) { 
      return buf[index-1]   
    } else {
      buf = null
      return 
    } 
  }

´Ë°æ±¾¿ÉÈ·±£ÔÚ²»ÔÙÐèÒª´óÐÍ»º³åÇøÊ±£¬¿ÉÒÔÊÕ¼¯ËüÃÇ¡£

ÓÃÀý 3£º¼àÌýÆ÷º¯Êý

Ò»ÖÖ³£¼ûģʽÊÇ×¢²áº¯ÊýÀ´¼àÌýÌØ¶¨Ê¼þµÄ·¢ÉúÇé¿ö¡£µ«ÎÊÌâÊÇ£¬¼àÌýÆ÷º¯ÊýµÄÉúÃüÖÜÆÚͨ³£ÊÇÎÞÏÞÆÚµÄ£¬»òÕß²»ÎªÓ¦ÓóÌÐòËùÖª¡£Òò´Ë£¬¼àÌýÆ÷º¯Êý×î¿ÉÄܵ¼ÖÂÄÚ´æÐ¹Â©¡£

“¼àÌýÆ÷º¯Êý×î¿ÉÄܵ¼ÖÂÄÚ´æÐ¹Â©¡£”

´ó¶àÊýÁ÷´¦Àí/»º³å·½°¸¶¼Ê¹ÓøûúÖÆÀ´»º´æ»ò»ýÀÛÒ»¸öÍⲿ·½·¨Öж¨ÒåµÄ˲ʱÊý¾Ý£¬¶øÔÚÒ»¸öÄäÃû±Õ°üº¯ÊýÖнøÐзÃÎÊ¡£ÄúÎÞ·¨¿ØÖư²×°µÄ¼àÌýÆ÷µÄÉúÃüÖÜÆÚ»ò¶ÔÆäÒ»ÎÞËù֪ʱ£¬¾Í»á³öÏÖ·çÏÕ£¬ÈçÏÂÃæµÄʾÀýËùʾ£º

var EventEmitter = require('events').EventEmitter
var ev = new EventEmitter()

function run() {
    var buf = new Buffer(1024 * 1024 * 100)
    var index = 0
    buf.fill('g')
    ev.on('readNext', function() {
      var ret = buf[index]
      index++
      return ret
    });
}

ÄÚ´æ±£Áô

ÏÂÃæµÄÆÁÄ»½ØÍ¼£¨ÔÚµ÷Óàrun() ·½·¨ºó»ñÈ¡£©Õ¹Ê¾ÁËÈçºÎΪ´óÐÍ»º³åÇø buf ±£ÁôÄڴ档ͨ¹ýÖ§ÅäÊ÷¿ÉÒÔ¿´µ½£¬Õâ¸ö´óÐÍ»º³åÇøÓÉÓÚÓë¸ÃʼþµÄ¹ØÁª¶ø±£³Ö»î¶¯£º

»Øµ÷º¯Êý£¨¼àÌýÆ÷£©±£ÁôµÄÊý¾Ý»áÔÚ³·Ïú×¢²á´¦Àíº¯Êý֮ǰһֱ±£³Ö»î¶¯×´Ì¬ — ÉõÖÁÔÚ¶ÁÈ¡ÁËËùÓÐÊý¾ÝºóÈԻᱣ³Ö»î¶¯×´Ì¬¡£ÔÚijЩÇé¿öÏ£¬¶Ô¼àÌýÆ÷µÄ¸÷´Î»Øµ÷Ö®¼ä¿ÉÄܲ»ÔÙÐèÒªÊý¾Ý¡£Èç¹û¿ÉÄÜ£¬Í¨³£×îºÃ¸ù¾ÝÐèÒª·ÖÅäÊý¾Ý£¬¶ø²»ÊÇÔÚ¸÷´Îµ÷ÓÃÖ®¼ä±£ÁôËü¡£

ÔÚÆäËûÇé¿öÏ£¬ÄúÎÞ·¨±ÜÃâÔÚ¼àÌýÆ÷µÄ¸÷´Îµ÷ÓÃÖ®¼ä±£ÁôÊý¾Ý¡£½â¾ö·½°¸ÊÇÈ·±£ API ÌṩÁËÒ»ÖÖ;¾¶À´ÔÚ²»ÔÙÐèÒª»Øµ÷ʱ³·Ïú×¢²áËüÃÇ¡£ÕâÊÇÒ»¸öʾÀý£º

// Because our closure is anonymous, we can't remove the listener by name, 
// so we clean all listeners.
ev.removeAllListeners()

´ËÓÃÀýµÄÒ»¸öÖøÃûµÄÀý×ÓÊÇÒ»ÖÖµäÐ굀 HTTP ·þÎñÆ÷ʵÏÖ£º

var http = require('http');

function runServer() {

    /* data local to runServer, but also accessible to
     * the closure context retained for the anonymous 
     * callback function by virtue of the lexical scope
     * in the outer enclosure.
     */
    var buf = new Buffer(1024 * 1024 * 100);
    buf.fill('g');
    
    http.createServer(function (req, res) {
      res.end(buf);
    }).listen(8080);

}
runServer();

¾¡¹Ü´ËʾÀýչʾÁËÒ»ÖÖʹÓÃÄÚ²¿º¯ÊýµÄ±ã½Ý·½Ê½£¬µ«Çë×¢Ò⣬ֻҪ·þÎñÆ÷¶ÔÏó´¦Óڻ״̬£¬»Øµ÷º¯Êý£¨ºÍ»º³åÇø¶ÔÏ󣩾Ͷ¼ÊǻµÄ¡£Ö»ÔÚ·þÎñÆ÷¹Ø±Õºó£¬¸Ã¶ÔÏó²Å·ûºÏÊÕ¼¯Ìõ¼þ¡£ÔÚÏÂÃæµÄÆÁÄ»½ØÍ¼ÖпÉÒÔ¿´µ½£¬ÓÉÓÚ·þÎñÆ÷ÇëÇó¼àÌýÆ÷ʹÓÃÁË»º³åÇø£¬ËùÒԸûº³åÇø½«±£³Ö»î¶¯×´Ì¬£º

Óɴ˵óöµÄ½ÌѵÊÇ£¬¶ÔÓÚÈκα£Áô´óÁ¿Êý¾ÝµÄ¼àÌýÆ÷£¬¶¼ÐèÒªÀí½â²¢¼Ç¼¼àÌýÆ÷µÄ±ØÒªÊÙÃü£¬È·±£ÔÚ²»ÔÙÐèÒª¼àÌýÆ÷ʱעÏúËü¡£ÁíÒ»ÖÖÃ÷Öǵķ½·¨ÊÇ£¬È·±£¼àÌýÆ÷ÔÚ¸÷´Îµ÷ÓÃÖ®¼ä±£Áô×îÉÙÁ¿µÄÊý¾Ý£¬ÒòΪËüÃÇͨ³£¾ßÓкܳ¤µÄÊÙÃü¡£

½áÊøÓï

±Õ°üÊÇÒ»ÖÖÇ¿´óµÄ±à³Ì½á¹¹£¬Äܹ»ÒÔ¸ü¼ÓÁé»îµÄ¡¢³öºõÒâÁϵķ½Ê½ÔÚ´úÂëºÍÊý¾ÝÖ®¼äʵÏְ󶨡£µ«ÊÇ£¬Ï°¹ßÓÚ Java »ò C++ µÈ¾ÉʽÓïÑԵijÌÐòÔ±¿ÉÄܲ»ÊìϤËüµÄ·¶Î§ÓïÒ塣ΪÁ˱ÜÃâÄÚ´æÐ¹Â©£¬Ò»¶¨ÒªÀí½â±Õ°üµÄÌØÕ÷ºÍËüÃǵÄÉúÃüÖÜÆÚ¡£

 

   
2972 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕ Ïà¹ØÎĵµ Ïà¹Ø¿Î³Ì



Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

AndroidÊÖ»ú¿ª·¢£¨Ò»£©
Àí½âJavascript
·ÇµäÐÍajaxʵ¼ù
³¹µ×µÄAjax
javascript ʹÓÃCookies
ʹÓà jQuery ¼ò»¯ Ajax ¿ª·¢

Struts+Spring+Hibernate
»ùÓÚJ2EEµÄWeb 2.0Ó¦Óÿª·¢
J2EEÉè¼ÆÄ£Ê½ºÍÐÔÄܵ÷ÓÅ
Java EE 5ÆóÒµ¼¶¼Ü¹¹Éè¼Æ
Javaµ¥Ôª²âÊÔ·½·¨Óë¼¼Êõ
Java±à³Ì·½·¨Óë¼¼Êõ

ijº½¿Õ¹«Ë¾IT²¿ JavaScriptʵ¼ù
ijµçÊÓÈí¼þ HTML5ºÍJavaScript
Öк½ÐÅ JavaScript¸ß¼¶Ó¦Óÿª·¢
´óÇìÓÍÌï web½çÃæAjax¿ª·¢¼¼Êõ
ºÍÀûʱ ʹÓÃAJAX½øÐÐWEBÓ¦Óÿª·¢