Ò»¡¢Node.jsÒì²½I/OµÄʵÏÖÔÀí
1.ʼþÑ»·
Ê×ÏÈ£¬ÎÒÃÇ×ÅÖØÇ¿µ÷Ò»ÏÂNode×ÔÉíµÄÖ´ÐÐÄ£ÐÍ¡ª¡ªÊ¼þÑ»·£¬ÕýÊÇËüʹµÃ»Øµ÷º¯ÊýÊ®·ÖÆÕ±é¡£
ÔÚ½ø³ÌÆô¶¯Ê±£¬Node±ã»á´´½¨Ò»¸öÀàËÆÓÚwhile(true)µÄÑ»·£¬Ã¿Ö´ÐÐÒ»´ÎÑ»·ÌåµÄ¹ý³ÌÎÒÃdzÆÎªTick¡£Ã¿¸öTickµÄ¹ý³Ì¾ÍÊDz鿴ÊÇ·ñÓÐʼþ´ý´¦Àí£¬Èç¹ûÓУ¬¾ÍÈ¡³öʼþ¼°ÆäÏà¹ØµÄ»Øµ÷º¯Êý¡£Èç¹û´æÔÚ¹ØÁªµÄ»Øµ÷º¯Êý£¬¾ÍÖ´ÐÐËüÃÇ¡£È»ºó½øÈëϸöÑ»·£¬Èç¹û²»ÔÙÓÐʼþ´¦Àí£¬¾ÍÍ˳ö½ø³Ì¡£Á÷³ÌͼÈçͼ3-11Ëùʾ¡£

2.¹Û²ìÕß
ÔÚÿ¸öTickµÄ¹ý³ÌÖУ¬ÈçºÎÅжÏÊÇ·ñÓÐʼþÐèÒª´¦ÀíÄØ£¿ÕâÀï±ØÐëÒªÒýÈëµÄ¸ÅÄîÊǹ۲ìÕß¡£
ÿ¸öʼþÑ»·ÖÐÓÐÒ»¸ö»òÕß¶à¸ö¹Û²ìÕߣ¬¶øÅжÏÊÇ·ñÓÐʼþÒª´¦ÀíµÄ¹ý³Ì¾ÍÊÇÏòÕâЩ¹Û²ìÕßѯÎÊÊÇ·ñÓÐÒª´¦ÀíµÄʼþ¡£
ä¯ÀÀÆ÷²ÉÓÃÁËÀàËÆµÄ»úÖÆ¡£Ê¼þ¿ÉÄÜÀ´×ÔÓû§µÄµã»÷»òÕß¼ÓÔØÄ³Ð©Îļþʱ²úÉú£¬¶øÕâЩ²úÉúµÄʼþ¶¼ÓжÔÓ¦µÄ¹Û²ìÕß¡£ÔÚNodeÖУ¬Ê¼þÖ÷ÒªÀ´Ô´ÓÚÍøÂçÇëÇó¡¢ÎļþI/OµÈ£¬ÕâЩʼþ¶ÔÓ¦µÄ¹Û²ìÕßÓÐÎļþI/O¹Û²ìÕß¡¢ÍøÂçI/O¹Û²ìÕߵȡ£¹Û²ìÕß½«Ê¼þ½øÐÐÁË·ÖÀà¡£
ʼþÑ»·ÊÇÒ»¸öµäÐ͵ÄÉú²úÕß/Ïû·ÑÕßÄ£ÐÍ¡£Òì²½I/O¡¢ÍøÂçÇëÇóµÈÔòÊÇʼþµÄÉú²úÕߣ¬Ô´Ô´²»¶ÏΪNodeÌṩ²»Í¬ÀàÐ͵Äʼþ£¬ÕâЩʼþ±»´«µÝµ½¶ÔÓ¦µÄ¹Û²ìÕßÄÇÀʼþÑ»·Ôò´Ó¹Û²ìÕßÄÇÀïÈ¡³öʼþ²¢´¦Àí¡£
ÔÚWindowsÏ£¬Õâ¸öÑ»·»ùÓÚIOCP´´½¨£¬¶øÔÚ*nixÏÂÔò»ùÓÚ¶àÏ̴߳´½¨¡£
3.ÇëÇó¶ÔÏó
ÎÒÃǽ«Í¨¹ý½âÊÍWindowsÏÂÒì²½I/O£¨ÀûÓÃIOCPʵÏÖ£©µÄ¼òµ¥Àý×ÓÀ´Ì½Ñ°´ÓJavaScript´úÂ뵽ϵͳÄÚºËÖ®¼ä¶¼·¢ÉúÁËʲô¡£
¶ÔÓÚÒ»°ãµÄ£¨·ÇÒì²½£©»Øµ÷º¯Êý£¬º¯ÊýÓÉÎÒÃÇ×ÔÐе÷Óã¬ÈçÏÂËùʾ£º
var forEach =
function (list, callback) {
for (var i = 0; i < list.length; i++) {
callback(list[i], i, list);
}
}; |
¶ÔÓÚNodeÖеÄÒì²½I/Oµ÷ÓöøÑÔ£¬»Øµ÷º¯ÊýÈ´²»ÓÉ¿ª·¢ÕßÀ´µ÷Óá£ÄÇô´ÓÎÒÃÇ·¢³öµ÷Óú󣬵½»Øµ÷º¯Êý±»Ö´ÐУ¬Öм䷢ÉúÁËÊ²Ã´ÄØ£¿
ÊÂʵÉÏ£¬´ÓJavaScript·¢Æðµ÷Óõ½ÄÚºËÖ´ÐÐÍêI/O²Ù×÷µÄ¹ý¶É¹ý³ÌÖУ¬´æÔÚÒ»ÖÖÖмä²úÎËü½Ð×öÇëÇó¶ÔÏó¡£
ÏÂÃæÎÒÃÇÒÔ×î¼òµ¥µÄfs.open()·½·¨À´×÷ΪÀý×Ó£¬Ì½Ë÷NodeÓëµ×²ãÖ®¼äÊÇÈçºÎÖ´ÐÐÒì²½I/Oµ÷ÓÃÒÔ¼°»Øµ÷º¯Êý¾¿¾¹ÊÇÈçºÎ±»µ÷ÓÃÖ´Ðеģº
fs.open = function(path,
flags, mode, callback) {
// ...
binding.open(pathModule._makeLong(path),
stringToFlags(flags),
mode,
callback);
};; |
fs.open()µÄʵ¼Êµ÷ÓÃÕ»£º

´ÓJavaScriptµ÷ÓÃNodeµÄºËÐÄÄ£¿é£¬ºËÐÄÄ£¿éµ÷ÓÃC++ÄÚ½¨Ä£¿é£¬ÄÚ½¨Ä£¿éͨ¹ýlibuv½øÐÐϵͳµ÷Óã¬ÕâÊÇNodeÀï¾µäµÄµ÷Ó÷½Ê½¡£ÕâÀïlibuv×÷Ϊ·â×°²ã£¬ÓÐÁ½¸öƽ̨µÄʵÏÖ£¬ÊµÖÊÉÏÊǵ÷ÓÃÁËuv_fs_open()·½·¨¡£ÔÚuv_fs_open()µÄµ÷Óùý³ÌÖУ¬ÎÒÃÇ´´½¨ÁËÒ»¸öFSReqWrapÇëÇó¶ÔÏó¡£´ÓJavaScript²ã´«ÈëµÄ²ÎÊýºÍµ±Ç°·½·¨¶¼±»·â×°ÔÚÕâ¸öÇëÇó¶ÔÏóÖУ¬ÆäÖÐÎÒÃÇ×îΪ¹Ø×¢µÄ»Øµ÷º¯ÊýÔò±»ÉèÖÃÔÚÕâ¸ö¶ÔÏóµÄoncomplete_symÊôÐÔÉÏ£º
req_wrap->object_->Set(oncomplete_sym, callback);
¶ÔÏó°ü×°Íê±Ïºó£¬ÔÚWindowsÏ£¬Ôòµ÷ÓÃQueueUserWorkItem()·½·¨½«Õâ¸öFSReqWrap¶ÔÏóÍÆÈëÏ̳߳ØÖеȴýÖ´ÐУ¬¸Ã·½·¨µÄ´úÂëÈçÏÂËùʾ£º
QueueUserWorkItem(&uv_fs_thread_proc, req, WT_EXECUTEDEFAULT)
ÖÁ´Ë£¬JavaScriptµ÷ÓÃÁ¢¼´·µ»Ø£¬ÓÉJavaScript²ãÃæ·¢ÆðµÄÒì²½µ÷ÓõĵÚÒ»½×¶Î¾Í´Ë½áÊø¡£JavaScriptÏ߳̿ÉÒÔ¼ÌÐøÖ´Ðе±Ç°ÈÎÎñµÄºóÐø²Ù×÷¡£µ±Ç°µÄI/O²Ù×÷ÔÚÏ̳߳ØÖеȴýÖ´ÐУ¬²»¹ÜËüÊÇ·ñ×èÈûI/O£¬¶¼²»»áÓ°Ïìµ½JavaScriptÏ̵߳ĺóÐøÖ´ÐУ¬Èç´Ë¾Í´ïµ½ÁËÒì²½µÄÄ¿µÄ¡£
ÇëÇó¶ÔÏóÊÇÒì²½I/O¹ý³ÌÖеÄÖØÒªÖмä²úÎËùÓеÄ״̬¶¼±£´æÔÚÕâ¸ö¶ÔÏóÖУ¬°üÀ¨ËÍÈëÏ̳߳صȴýÖ´ÐÐÒÔ¼°I/O²Ù×÷Íê±ÏºóµÄ»Øµ÷´¦Àí¡£
4.Ö´Ðлص÷
×é×°ºÃÇëÇó¶ÔÏó¡¢ËÍÈëI/OÏ̳߳صȴýÖ´ÐУ¬Êµ¼ÊÉÏÍê³ÉÁËÒì²½I/OµÄµÚÒ»²¿·Ö£¬»Øµ÷֪ͨÊǵڶþ²¿·Ö¡£
Ï̳߳ØÖеÄI/O²Ù×÷µ÷ÓÃÍê±ÏÖ®ºó£¬»á½«»ñÈ¡µÄ½á¹û´¢´æÔÚreq->resultÊôÐÔÉÏ£¬È»ºóµ÷ÓÃPostQueuedCompletionStatus()֪ͨIOCP£¬¸æÖªµ±Ç°¶ÔÏó²Ù×÷ÒѾÍê³É¡£PostQueuedCompletionStatus()·½·¨µÄ×÷ÓÃÊÇÏòIOCPÌá½»Ö´ÐÐ״̬£¬²¢½«Ï̹߳黹Ï̳߳ء£Í¨¹ýPostQueuedCompletionStatus()·½·¨Ìá½»µÄ״̬£¬¿ÉÒÔͨ¹ýGetQueuedCompletionStatus()ÌáÈ¡¡£
ÔÚÕâ¸ö¹ý³ÌÖУ¬ÎÒÃÇÆäʵ»¹¶¯ÓÃÁËʼþÑ»·µÄI/O¹Û²ìÕß¡£ÔÚÿ´ÎTickµÄÖ´ÐÐÖУ¬Ëü»áµ÷ÓÃIOCPÏà¹ØµÄGetQueuedCompletionStatus()·½·¨¼ì²éÏ̳߳ØÖÐÊÇ·ñÓÐÖ´ÐÐÍêµÄÇëÇó£¬Èç¹û´æÔÚ£¬»á½«ÇëÇó¶ÔÏó¼ÓÈëµ½I/O¹Û²ìÕߵĶÓÁÐÖУ¬È»ºó½«Æäµ±×öʼþ´¦Àí¡£
I/O¹Û²ìÕ߻ص÷º¯ÊýµÄÐÐΪ¾ÍÊÇÈ¡³öÇëÇó¶ÔÏóµÄresultÊôÐÔ×÷Ϊ²ÎÊý£¬È¡³öoncomplete_symÊôÐÔ×÷Ϊ·½·¨£¬È»ºóµ÷ÓÃÖ´ÐУ¬ÒÔ´Ë´ïµ½µ÷ÓÃJavaScriptÖд«ÈëµÄ»Øµ÷º¯ÊýµÄÄ¿µÄ¡£
ÖÁ´Ë£¬Õû¸öÒì²½I/OµÄÁ÷³ÌÍêÈ«½áÊø£¬Èçͼ3-13Ëùʾ¡£

5.×ܽá
Òì²½I/OµÄ¼¸¸ö¹Ø¼ü´Ê£ºµ¥Ï̡߳¢Ê¼þÑ»·¡¢¹Û²ìÕߺÍI/OÏ̳߳ء£
ÕâÀïµ¥Ïß³ÌÓëI/OÏ̳߳ØÖ®¼ä¿´ÆðÀ´ÓÐЩã£ÂÛµÄÑù×Ó¡£ÓÉÓÚÎÒÃÇÖªµÀjavascriptÊǵ¥Ï̵߳ģ¬ËùÒÔ°´³£Ê¶ºÜÈÝÒ×Àí½âΪËü²»Äܳä·ÖÀûÓöàºËCPU¡£ÊÂʵÉÏ£¬ÔÚNodeÖУ¬³ýÁËJavaScriptÊǵ¥Ïß³ÌÍ⣬Node×ÔÉíÆäʵÊǶàÏ̵߳ģ¬Ö»ÊÇI/OÏß³ÌʹÓõÄCPU½ÏÉÙ¡£ÁíÒ»¸öÐèÒªÖØÊӵĹ۵ãÔòÊÇ£¬³ýÁËÓû§´úÂëÎÞ·¨²¢ÐÐÖ´ÐÐÍ⣬ËùÓеÄI/O£¨´ÅÅÌI/OºÍÍøÂçI/OµÈ£©ÔòÊÇ¿ÉÒÔ²¢ÐÐÆðÀ´µÄ¡£
¶þ¡¢·ÇI/OµÄÒì²½API
setTimeout()¡¢setInterval()¡¢setImmediate()ºÍprocess.nextTick()¡£
1.¶¨Ê±Æ÷
setTimeout()ºÍsetInterval()Óëä¯ÀÀÆ÷ÖеÄAPIÊÇÒ»Öµģ¬·Ö±ðÓÃÓÚµ¥´ÎºÍ¶à´Î¶¨Ê±Ö´ÐÐÈÎÎñ¡£ËüÃǵÄʵÏÖÔÀíÓëÒì²½I/O±È½ÏÀàËÆ£¬Ö»ÊDz»ÐèÒªI/OÏ̳߳صIJÎÓë¡£
µ÷ÓÃsetTimeout()»òÕßsetInterval()´´½¨µÄ¶¨Ê±Æ÷»á±»²åÈëµ½¶¨Ê±Æ÷¹Û²ìÕßÄÚ²¿µÄÒ»¸öºìºÚÊ÷ÖС£Ã¿´ÎTickÖ´ÐÐʱ£¬»á´Ó¸ÃºìºÚÊ÷Öеü´úÈ¡³ö¶¨Ê±Æ÷¶ÔÏ󣬼ì²éÊÇ·ñ³¬¹ý¶¨Ê±Ê±¼ä£¬Èç¹û³¬¹ý£¬¾ÍÐγÉÒ»¸öʼþ£¬ËüµÄ»Øµ÷º¯Êý½«Á¢¼´Ö´ÐС£
ͼ3-14Ìáµ½µÄÖ÷ÒªÊÇsetTimeout()µÄÐÐΪ¡£setInterval()ÓëÖ®Ïàͬ£¬Çø±ðÔÚÓÚºóÕßÊÇÖØ¸´ÐԵļì²âºÍÖ´ÐС£
¶¨Ê±Æ÷µÄÎÊÌâÔÚÓÚ£¬Ëü²¢·Ç¾«È·µÄ£¨ÔÚÈÝÈÌ·¶Î§ÄÚ£©¡£¾¡¹ÜʼþÑ»·Ê®·Ö¿ì£¬µ«ÊÇÈç¹ûijһ´ÎÑ»·Õ¼ÓõÄʱ¼ä½Ï¶à£¬ÄÇôÏ´ÎÑ»·Ê±£¬ËüÒ²ÐíÒѾ³¬Ê±ºÜ¾ÃÁË¡£Æ©Èçͨ¹ýsetTimeout()É趨һ¸öÈÎÎñÔÚ10ºÁÃëºóÖ´ÐУ¬µ«ÊÇÔÚ9ºÁÃëºó£¬ÓÐÒ»¸öÈÎÎñÕ¼ÓÃÁË5ºÁÃëµÄCPUʱ¼äƬ£¬ÔÙ´ÎÂÖµ½¶¨Ê±Æ÷Ö´ÐÐʱ£¬Ê±¼ä¾ÍÒѾ¹ýÆÚ4ºÁÃë¡£

2.process.nextTick()
ÓÉÓÚʼþÑ»·×ÔÉíµÄÌØµã£¬¶¨Ê±Æ÷µÄ¾«È·¶È²»¹»¡£¶øÊÂʵÉÏ£¬²ÉÓö¨Ê±Æ÷ÐèÒª¶¯ÓúìºÚÊ÷£¬´´½¨¶¨Ê±Æ÷¶ÔÏóºÍµü´úµÈ²Ù×÷£¬¶øsetTimeout(fn,
0)µÄ·½Ê½½ÏΪÀË·ÑÐÔÄÜ¡£
ʵ¼ÊÉÏ£¬process.nextTick()·½·¨µÄ²Ù×÷Ïà¶Ô½ÏΪÇáÁ¿£¬¾ßÌå´úÂëÈçÏ£º
process.nextTick = function(callback) {
// on the way out, don't bother.
// it won't get fired anyway
if (process._exiting) return;
if (tickDepth >= process.maxTickDepth)
maxTickWarn();
var tock = { callback: callback };
if (process.domain) tock.domain = process.domain;
nextTickQueue.push(tock);
if (nextTickQueue.length) {
process._needTickCallback();
}
}; |
ÿ´Îµ÷ÓÃprocess.nextTick()·½·¨£¬Ö»»á½«»Øµ÷º¯Êý·ÅÈë¶ÓÁÐÖУ¬ÔÚÏÂÒ»ÂÖTickʱȡ³öÖ´ÐС£
¶¨Ê±Æ÷ÖвÉÓúìºÚÊ÷µÄ²Ù×÷ʱ¼ä¸´ÔÓ¶ÈΪO(lg(n))£¬nextTick()µÄʱ¼ä¸´ÔÓ¶ÈΪO(1)¡£Ïà½Ï֮ϣ¬process.nextTick()¸ü¸ßЧ¡£
3.setImmediate()
setImmediate()·½·¨Óëprocess.nextTick()·½·¨Ê®·ÖÀàËÆ£¬¶¼Êǽ«»Øµ÷º¯ÊýÑÓ³ÙÖ´ÐС£
process.nextTick()ÖеĻص÷º¯ÊýÖ´ÐеÄÓÅÏȼ¶Òª¸ßÓÚsetImmediate()¡£
ÔÒòÔÚÓÚʼþÑ»·¶Ô¹Û²ìÕߵļì²éÊÇÓÐÏȺó˳ÐòµÄ£¬process.nextTick()ÊôÓÚidle¹Û²ìÕߣ¬setImmediate()ÊôÓÚcheck¹Û²ìÕß¡£ÔÚÿһ¸öÂÖÑ»·¼ì²éÖУ¬idle¹Û²ìÕßÏÈÓÚI/O¹Û²ìÕߣ¬I/O¹Û²ìÕßÏÈÓÚcheck¹Û²ìÕß¡£
ÔÚ¾ßÌåʵÏÖÉÏ£¬process.nextTick()µÄ»Øµ÷º¯Êý±£´æÔÚÒ»¸öÊý×éÖУ¬setImmediate()µÄ½á¹ûÔòÊDZ£´æÔÚÁ´±íÖС£ÔÚÐÐΪÉÏ£¬process.nextTick()ÔÚÿÂÖÑ»·ÖлὫÊý×éÖеĻص÷º¯ÊýÈ«²¿Ö´ÐÐÍ꣬¶øsetImmediate()ÔÚÿÂÖÑ»·ÖÐÖ´ÐÐÁ´±íÖеÄÒ»¸ö»Øµ÷º¯Êý¡£
// ¼ÓÈëÁ½¸önextTick()µÄ»Øµ÷º¯Êý
process.nextTick(function () {
console.log('nextTickÑÓ³ÙÖ´ÐÐ1');
});
process.nextTick(function () {
console.log('nextTickÑÓ³ÙÖ´ÐÐ2');
});
// ¼ÓÈëÁ½¸ösetImmediate()µÄ»Øµ÷º¯Êý
setImmediate(function () {
console.log('setImmediateÑÓ³ÙÖ´ÐÐ1');
// ½øÈëÏ´ÎÑ»·
process.nextTick(function () {
console.log('Ç¿ÊÆ²åÈë');
});
});
setImmediate(function () {
console.log('setImmediateÑÓ³ÙÖ´ÐÐ2');
});
console.log('Õý³£Ö´ÐÐ'); |
ÆäÖ´Ðнá¹ûÈçÏ£º
Õý³£Ö´ÐÐ
nextTickÑÓ³ÙÖ´ÐÐ1
nextTickÑÓ³ÙÖ´ÐÐ2
setImmediateÑÓ³ÙÖ´ÐÐ1
Ç¿ÊÆ²åÈë
setImmediateÑÓ³ÙÖ´ÐÐ2
´ÓÖ´Ðнá¹ûÉÏ¿ÉÒÔ¿´³ö£¬µ±µÚÒ»¸ösetImmediate()µÄ»Øµ÷º¯ÊýÖ´Ðк󣬲¢Ã»ÓÐÁ¢¼´Ö´Ðеڶþ¸ö£¬¶øÊǽøÈëÁËÏÂÒ»ÂÖÑ»·£¬Ôٴΰ´process.nextTick()ÓÅÏÈ¡¢setImmediate()´ÎºóµÄ˳ÐòÖ´ÐС£
Ö®ËùÒÔÕâÑùÉè¼Æ£¬ÊÇΪÁ˱£Ö¤Ã¿ÂÖÑ»·Äܹ»½Ï¿ìµØÖ´ÐнáÊø£¬·ÀÖ¹CPUÕ¼Óùý¶à¶ø×èÈûºóÐøI/Oµ÷ÓõÄÇé¿ö¡£
Èý¡¢Ê¼þÇý¶¯Óë¸ßÐÔÄÜ·þÎñÆ÷
Òì²½I/O²»½ö½öÓ¦ÓÃÔÚÎļþ²Ù×÷ÖС£¶ÔÓÚÍøÂçÌ×½Ó×ֵĴ¦Àí£¬NodeÒ²Ó¦Óõ½ÁËÒì²½I/O£¬ÍøÂçÌ×½Ó×ÖÉÏÕìÌýµ½µÄÇëÇó¶¼»áÐγÉʼþ½»¸øI/O¹Û²ìÕß¡£Ê¼þÑ»·»á²»Í£µØ´¦ÀíÕâÐ©ÍøÂçI/Oʼþ¡£Èç¹ûJavaScriptÓд«Èë»Øµ÷º¯Êý£¬ÕâЩʼþ½«»á×îÖÕ´«µÝµ½ÒµÎñÂß¼²ã½øÐд¦Àí¡£ÀûÓÃNode¹¹½¨Web·þÎñÆ÷£¬ÕýÊÇÔÚÕâÑùÒ»¸ö»ù´¡ÉÏʵÏֵ쬯äÁ÷³ÌͼÈçͼ3-15Ëùʾ¡£

ÏÂÃæÎª¼¸ÖÖ¾µäµÄ·þÎñÆ÷Ä£ÐÍ£¬ÕâÀï¶Ô±ÈÏÂËüÃǵÄÓÅȱµã¡£
ͬ²½Ê½
¶ÔÓÚͬ²½Ê½µÄ·þÎñ£¬Ò»´ÎÖ»ÄÜ´¦ÀíÒ»¸öÇëÇ󣬲¢ÇÒÆäÓàÇëÇó¶¼´¦Óڵȴý״̬¡£
ÿ½ø³Ì/ÿÇëÇó
Ϊÿ¸öÇëÇóÆô¶¯Ò»¸ö½ø³Ì£¬ÕâÑù¿ÉÒÔ´¦Àí¶à¸öÇëÇ󣬵«ÊÇËü²»¾ß±¸À©Õ¹ÐÔ£¬ÒòΪϵͳ×ÊÔ´Ö»ÓÐÄÇô¶à¡£
ÿÏß³Ì/ÿÇëÇó
Ϊÿ¸öÇëÇóÆô¶¯Ò»¸öÏß³ÌÀ´´¦Àí¡£¾¡¹ÜÏ̱߳Ƚø³ÌÒªÇáÁ¿£¬µ«ÊÇÓÉÓÚÿ¸öÏ̶߳¼Õ¼ÓÃÒ»¶¨Äڴ棬µ±´ó²¢·¢ÇëÇóµ½À´Ê±£¬Äڴ潫»áºÜ¿ìÓù⣬µ¼Ö·þÎñÆ÷»ºÂý¡£Ã¿Ïß³Ì/ÿÇëÇóµÄÀ©Õ¹ÐÔ±Èÿ½ø³Ì/ÿÇëÇóµÄ·½Ê½ÒªºÃ£¬µ«¶ÔÓÚ´óÐÍÕ¾µã¶øÑÔÒÀÈ»²»¹»¡£
ÿÏß³Ì/ÿÇëÇóµÄ·½Ê½Ä¿Ç°»¹±»ApacheËù²ÉÓá£Nodeͨ¹ýʼþÇý¶¯µÄ·½Ê½´¦ÀíÇëÇó£¬ÎÞÐëΪÿһ¸öÇëÇó´´½¨¶îÍâµÄ¶ÔÓ¦Ị̈߳¬¿ÉÒÔÊ¡µô´´½¨Ï̺߳ÍÏú»ÙÏ̵߳ĿªÏú£¬Í¬Ê±²Ù×÷ϵͳÔÚµ÷¶ÈÈÎÎñʱÒòΪÏ߳̽ÏÉÙ£¬ÉÏÏÂÎÄÇл»µÄ´ú¼ÛºÜµÍ¡£ÕâʹµÃ·þÎñÆ÷Äܹ»ÓÐÌõ²»Îɵش¦ÀíÇëÇ󣬼´Ê¹ÔÚ´óÁ¿Á¬½ÓµÄÇé¿öÏ£¬Ò²²»ÊÜÏß³ÌÉÏÏÂÎÄÇл»¿ªÏúµÄÓ°Ï죬ÕâÊÇNode¸ßÐÔÄܵÄÒ»¸öÔÒò¡£
ʼþÇý¶¯´øÀ´µÄ¸ßЧÒѾ½¥½¥¿ªÊ¼ÎªÒµ½çËùÖØÊÓ¡£ÖªÃû·þÎñÆ÷Nginx£¬Ò²ÞðÆúÁ˶àÏ̵߳ķ½Ê½£¬²ÉÓÃÁ˺ÍNodeÏàͬµÄʼþÇý¶¯¡£Èç½ñ£¬Nginx´óÓÐÈ¡´úApacheÖ®ÊÆ¡£Node¾ßÓÐÓëNginxÏàͬµÄÌØÐÔ£¬²»Í¬Ö®´¦ÔÚÓÚNginx²ÉÓô¿Cд³É£¬ÐÔÄܽϸߣ¬µ«ÊÇËü½öÊʺÏÓÚ×öWeb·þÎñÆ÷£¬ÓÃÓÚ·´Ïò´úÀí»ò¸ºÔؾùºâµÈ·þÎñ£¬ÔÚ´¦Àí¾ßÌåÒµÎñ·½Ãæ½ÏΪǷȱ¡£NodeÔòÊÇÒ»Ì׸ßÐÔÄܵį½Ì¨£¬¿ÉÒÔÀûÓÃËü¹¹½¨ÓëNginxÏàͬµÄ¹¦ÄÜ£¬Ò²¿ÉÒÔ´¦Àí¸÷ÖÖ¾ßÌåÒµÎñ£¬¶øÇÒÓë±³ºóµÄÍøÂç±£³ÖÒì²½³©Í¨¡£Á½ÕßÏà±È£¬NodeûÓÐNginxÔÚWeb·þÎñÆ÷·½ÃæÄÇôרҵ£¬µ«³¡¾°¸ü´ó£¬×ÔÉíÐÔÄÜÒ²²»´í¡£ÔÚʵ¼ÊÏîÄ¿ÖУ¬ÎÒÃÇ¿ÉÒÔ½áºÏËüÃǸ÷×ÔÓŵ㣬ÒÔ´ïµ½Ó¦ÓõÄ×îÓÅÐÔÄÜ¡£ |