ÔÚ 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ÌÐòÔ±¿ÉÄܲ»ÊìϤËüµÄ·¶Î§ÓïÒ塣ΪÁ˱ÜÃâÄÚ´æÐ¹Â©£¬Ò»¶¨ÒªÀí½â±Õ°üµÄÌØÕ÷ºÍËüÃǵÄÉúÃüÖÜÆÚ¡£
|