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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓƵ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
Node JSÌåϵ¼Ü¹¹ - µ¥Ïß³ÌʼþÑ­»·
 
  3126  次浏览      18
  2018-5-11 
 
±à¼­ÍƼö:
±¾ÎÄÀ´×ÔÍøÂç ,½ñÌìÈÃÎÒÃÇÀ´Á˽âNode JSµÄÌåϵ¼Ü¹¹ºÍµ¥Ïß³ÌʼþÑ­»·Ä£ÐÍ¡£

Node JSÌåϵ¼Ü¹¹

ÔÚ¿ªÊ¼Ñ§Ï°Node JS±à³ÌʾÀýÇ°£¬Á˽âNode JSµÄÌåϵ¼Ü¹¹ÊÇÊ®·ÖÖØÒªµÄ¡£ÎÒÃǽ«ÒªÌÖÂÛ£¬Node JSµÄµ×²ã¹¤×÷Ô­ÀíÊÇʲô£¬Ëü×ñÑ­ÔõÑùµÄ´¦ÀíÄ£ÐÍ£¬ÒÔ¼°ËüÊÇÈçºÎʹÓõ¥Ïß³ÌÄ£ÐÍ´¦ÀíÀ´×Ô¿Í»§¶ËµÄ²¢·¢ÇëÇó¡£

Node JS µ¥Ïß³ÌʼþÑ­»·Ä£ÐÍ

֮ǰÌáµ½£¬Node JSÓ¦ÓÃʹÓá°µ¥Ïß³ÌʼþÑ­»·Ä£ÐÍ¡±£¨Single Threaded Event Loop Model£©´¦ÀíÀ´×Ô¿Í»§¶ËµÄ¶à²¢·¢ÇëÇó¡£

ÏÖÔÚÓкܶàµÄWebÓ¦Óÿª·¢¼¼Êõ£¬ÀýÈçJSP£¬Spring MVC£¬ASP.NET£¬HTML£¬Ajax£¬jQueryµÈ¡£µ«ÊÇËùÓеÄÕâЩ¼¼Êõ¶¼ÊÇ×ñÑ­¡°¶àÏß³ÌÇëÇó/ÏìÓ¦¡±£¨Multi-Threaded Request-Response£©µÄ½á¹¹È¥´¦ÀíÀ´×Ô¿Í»§¶ËµÄ¶à²¢·¢ÇëÇó¡£

ÓÉÓÚ¡°¶àÏß³ÌÇëÇó/ÏìÓ¦¡°½á¹¹ÒѾ­ÔÚ´óÁ¿µÄwebÓ¦Óÿò¼ÜÖÐʹÓã¬Òò´ËÎÒÃÇÓ¦¸ÃÒѾ­¶ÔÆäÓÐËùÁ˽⡣µ«ÊÇΪʲôNode JSÈ´Ñ¡ÔñÁËÓëÕâЩ¿ò¼Ü²»Í¬µÄÌåϵ½á¹¹ÄØ¡£¶àÏ߳̽ṹºÍµ¥Ïß³ÌʼþÑ­»·½á¹¹µÄÖ÷ÒªÇø±ðÊÇʲôÄØ¡£

ÈκÎÒ»¸ö¿ª·¢Õ߶¼¿ÉÒÔÇáËɵÄѧ»áNode JS²¢Ê¹ÓÃËü¿ª·¢³ÌÐò¡£µ«ÊÇÈç¹û²»Á˽âNode JSµÄÄÚ²¿»úÖÆ£¬Ôò½«»áÎÞ·¨¸üºÃµØÉè¼ÆºÍ¿ª·¢Node JSÓ¦Óá£Òò´ËÔÚ¿ª·¢Ç°£¬ÓбØÒªÏÈÁ˽âNode JSƽ̨µÄÄÚ²¿»úÀí¡£

Node JS ƽ̨

Node JSƽ̨ʹÓá°µ¥Ïß³ÌʼþÑ­»·Ä£ÐÍ¡±´¦ÀíÀ´×Ô¿Í»§¶ËµÄ¶à²¢·¢ÇëÇó¡£µ«ÊÇËüÊÇÈçºÎÔÚ²»Ê¹ÓöàÏ̵߳ÄÇë¿èÏ´¦Àí¶à²¢·¢ÇëÇóÄØ£¿Ê¼þÑ­»·Ä£ÐÍÓÖÊÇʲôÄØ¡£ÎÒÃǽ«ÖðÒ»½øÐн²½â¡£

ÔÚÌÖÂÛ¡°µ¥Ïß³ÌʼþÑ­»·Ä£ÐÍ¡±Ö®Ç°£¬Ê×ÏÈÀ´»Ø¹ËÏ¡°¶àÏß³ÌÇëÇó-ÏìÓ¦¡±½á¹¹¡£

´«Í³µÄWebÓ¦Óô¦ÀíÄ£ÐÍ

µ±½ñ´ó¶àÊýδʹÓÃNode JS½øÐпª·¢µÄWebÓ¦Ó㬻ù±¾É϶¼ÊÇ×ñÑ­¡°¶àÏß³ÌÇëÇó-ÏìÓ¦¡±½á¹¹£¬¼ò³ÆΪ¡±ÇëÇó/ÏìӦģÐÍ¡°£¨Request/Response Model£©¡£

¿Í»§¶Ë½«ÇëÇó·¢Ë͸ø·þÎñ¶Ë£¬·þÎñ¶Ë¸ù¾ÝÇëÇó½øÐд¦Àí£¬×¼±¸ÏìÓ¦£¨Êý¾Ý£©£¬²¢½«Æä·µ»Ø¸ø¿Í»§¶Ë¡£

Õâ¸öÄ£ÐÍʹÓÃHTTPЭÒé¡£ÓÉÓÚHTTPÊÇÎÞ״̬ЭÒ飬Òò´Ë¡±ÇëÇó/ÏìӦģÐÍ¡°Ò²ÊÇÎÞ״̬µÄÄ£ÐÍ¡£ËùÒÔÎÒÃÇÓÖ¿ÉÒÔ³ÆÆäΪ¡±ÎÞ״̬ÇëÇó/ÏìӦģÐÍ¡°£¨Request/Response Stateless Model£©¡£

¼ò¶øÑÔÖ®£¬Õâ¸öÄ£ÐÍʹÓõÄÊǶàÏß³ÌÀ´´¦Àí¿Í»§¶ËµÄ¶à²¢·¢ÇëÇó¡£ÔÚÌÖÂÛÆäÄÚ²¿»úÀíÇ°£¬ÎÒÃÇÏÈͨ¹ýÏÂÃæµÄͼ½øÐиÅÀÀ¡£

¡±ÇëÇó/ÏìӦģÐÍ¡°µÄ´¦Àí²½Öè

¿Í»§¶ËÏò·þÎñ¶Ë·¢ËÍÇëÇó

Web·þÎñ¶ËÔÚÄÚ²¿Î¬»¤Ò»¸öÓиöÊýÏÞÖƵÄÏ̳߳أ¬Îª¿Í»§¶ËµÄÇëÇóÌṩ·þÎñ

Web·þÎñ¶ËÑ­»·¼àÌýÀ´×Ô¿Í»§¶ËµÄÇëÇó

Web·þÎñ¶ËÊÕµ½ÇëÇó

Web·þÎñ¶ËÑ¡ÔñÒ»¸ö¿Í»§¶ËÇëÇó

´ÓÏ̳߳أ¨Thread pool£©Ñ¡ÔñÒ»¸öỊ̈߳¨Thread£©

½«¸ÃÏ̷߳ÖÅä¸ø¸ÕÑ¡ÔñµÄÇëÇó

¸ÃÏ߳̽«»á¸ºÔð¶ÁÈ¡£¬´¦Àí¿Í»§¶ËÇëÇó£¬Ö´ÐÐÈκÎI/O×èÈûµÄ²Ù×÷£¨Èç¹ûÐèÒªµÄ»°£©£¬ÒÔ¼°×¼±¸ÏìÓ¦µÄÄÚÈÝ

¸ÃÏ߳̽«×¼±¸¾ÍÐ÷µÄÏìÓ¦·¢Ë͸øWeb·þÎñ¶Ë

Web·þÎñ¶ËÒÀ´Î½«ÏìÓ¦»ØÖ´¸ø¿Í»§¶Ë

·þÎñÆ÷²ÉÓÃÎÞÏßÑ­»·¼àÌý¿Í»§¶ËµÄÇëÇó£¬Õë¶ÔËùÓеĿͻ§¶ËÇëÇóÖ´ÐÐÉÏÊöµÄËùÓв½Öè¡£ÕâÒâζ×ŶÔÓÚÿһ¸ö¿Í»§¶ËÇëÇ󣬸ÃÄ£ÐÍ£¨ÇëÇó/ÏìӦģÐÍ£©¶¼ÒªÎªÆä´´½¨Ò»¸öÏ̡߳£

Èç¹û¸ü¶àµÄ¿Í»§¶ËÇëÇóÐèÒªI/O×èÈû²Ù×÷µÄ»¯£¬ÄÇôËùÓеÄÏ߳̽«ÔÚ×¼±¸ÏìÓ¦½×¶Î´¦ÓÚ·±Ã¦×´Ì¬¡£Õâ¾ÍÒâζןóÐøµÄ¿Í»§¶ËÇëÇóÐèÒªµÈ´ý¸ü³¤µÄʱ¼ä²ÅÄܵõ½ÏìÓ¦¡£

ͼʾÃèÊö£º

ÕâÀïÓС°n¡°¸ö¿Í»§¶ËÏò·þÎñ¶Ë·¢ËÍÇëÇ󣬼ÙÉèËüÃÇÊDz¢·¢½øÈëWebÓ¦ÓóÌÐò

¼ÙÉè¿Í»§¶Ë·Ö±ðΪClient-1£¬Client-2¡­¡­£¬Client-n

Web·þÎñ¶Ëά»¤Ò»¸öÓиöÏÞµÄÏ̳߳ء£¼ÙÉèÔÚÏ̳߳ØÖеÄÏ̸߳öÊýÊÇ¡±m¡±

Web·þÎñ¶ËÒÀ´Î½ÓÊÕ¿Í»§¶Ë·¢Ë͵ÄÇëÇó

Web·þÎñ¶ËÑ¡Ôñ¿Í»§¶ËClient-1µÄRequest-1ÇëÇ󣬲¢ÇÒ´ÓÏ̳߳ØÖÐÑ¡ÔñÏß³ÌT-1×÷Ϊ´¦Àí¸ÃÇëÇóµÄÏ̡߳£

Ïß³ÌT-1¶ÁÈ¡¿Í»§¶ËClient-1µÄRequest-1ÇëÇ󣬽øÐд¦Àí

Request-1ÇëÇó²»ÐèÒªI/O×èÈûµÄ²Ù×÷

Ïß³ÌT-1Ö´ÐбØÐëµÄ²Ù×÷£¬×¼±¸ÏìÓ¦Response-1£¬²¢½«Æä·¢Ë͸ø·þÎñ¶Ë

·þÎñ¶ËÒÀÕÕÏìÓ¦´ÎÐò½«Response-1»ØÖ´¸øClient-1

Web·þÎñ¶ËÑ¡Ôñ¿Í»§¶ËClient-2µÄRequest-2ÇëÇ󣬲¢ÇÒ´ÓÏ̳߳ØÖÐÑ¡ÔñÏß³ÌT-2×÷Ϊ´¦Àí¸ÃÇëÇóµÄÏ̡߳£

Ïß³ÌT-2¶ÁÈ¡¿Í»§¶ËClient-2µÄRequest-2ÇëÇ󣬽øÐд¦Àí

Request-2ÇëÇó²»ÐèÒªI/O×èÈûµÄ²Ù×÷

Ïß³ÌT-2Ö´ÐбØÐëµÄ²Ù×÷£¬×¼±¸ÏìÓ¦Response-2£¬²¢½«Æä·¢Ë͸ø·þÎñ¶Ë

·þÎñ¶ËÒÀÕÕÏìÓ¦´ÎÐò½«Response-2»ØÖ´¸øClient-2

Web·þÎñ¶ËÑ¡Ôñ¿Í»§¶ËClient-nµÄRequest-nÇëÇ󣬲¢ÇÒ´ÓÏ̳߳ØÖÐÑ¡ÔñÏß³ÌT-n×÷Ϊ´¦Àí¸ÃÇëÇóµÄÏ̡߳£

Ïß³ÌT-n¶ÁÈ¡¿Í»§¶ËClient-2µÄRequest-nÇëÇ󣬽øÐд¦Àí

Request-nÇëÇóÐèÒª½ÏÖصÄI/O×èÈû²Ù×÷ºÍÔËËã²Ù×÷

Ïß³ÌT-n»á»¨·Ñ¸ü¶àµÄʱ¼ä£¬ºÍÍⲿϵͳ½øÐн»»¥£¬²¢Ö´ÐбØÐëµÄ²Ù×÷£¬×¼±¸ÏìÓ¦Response-n£¬²¢½«Æä·¢Ë͸ø·þÎñ¶Ë

·þÎñ¶ËÒÀÕÕÏìÓ¦´ÎÐò½«Response-n»ØÖ´¸øClient-n

Èç¹ûn>m£¨´ó¶àÇé¿ö¶¼ÊÇÕâÑù£©£¬Ò²¾ÍÊÇ˵ÐèÒª·ÖÅä¸øÇëÇóµÄÏß³ÌÊýÒª´óÓÚ¿ÉÓõÄÏß³ÌÊý¡£µ±ËùÓеÄÏ̱߳»Ê¹ÓÃʱ£¬ÄÇôʣÓàµÄ¿Í»§¶ËÇëÇó¾ÍÔÚ¶ÓÁÐÖеȴý£¬Ö±µ½Ò»Ð©´¦ÓÚ·±Ã¦×´Ì¬µÄÏß³ÌÍê³É¶Ô¸ºÔðÏ̵߳Ĵ¦ÀíÈÎÎñ£¬¸Ä±ä״̬Ϊ¿ÕÏС£

Èç¹ûÏ̶߳¼³¤Ê±¼ä´¦ÓÚI/O·±Ã¦µÄ״̬£¨ÀýÈ磬ÓëÊý¾Ý¿â£¨Database£©£¬Îļþϵͳ£¨file system£©£¬JMS¶ÓÁУ¨JMS Queue£©£¬Íⲿ·þÎñ£¨ external services£©µÈ£©¡£ÔòÊ£Óàδ´¦ÀíµÄÇëÇóÔò½«µÈ´ýºÜ³¤Ê±¼ä¡£

µ±Ï̳߳صÄһЩÏß³ÌÒѾ­ÎªÖ´ÐÐϸöÈÎÎñ×¼±¸¾ÍÐ÷ʱ£¬·þÎñ¶Ë½«ÕâЩÏ̷߳ÖÅä¸øÊ£ÓàµÄ¿Í»§¶ËÇëÇó

ÿ¸öÏ̶߳¼ÒªÊ¹ÓÃÐí¶àµÄ×ÊÔ´£¬ÀýÈçÄÚ´æµÈ¡£ËùÒÔÔÚÏ̴߳ӷ±Ã¦×´Ì¬±äΪ¿ÕÏÐ״̬ʱ£¬ÐèÒªÊÍ·ÅËùÓÐÕ¼ÓõÄ×ÊÔ´

¡±ÇëÇó/ÏìӦģÐÍ¡°µÄȱµã

ÔÚ´¦Àí´óÁ¿Ôö¼ÓµÄ¿Í»§¶ËÇëÇóʱЧÂʽϲî

µ±²¢·¢µÄ¿Í»§¶ËÇëÇóÔö¼Óʱ£¬¾ÍÐèÒª¸ü¶àµÄỊ̈߳¬»áµ¼Ö´óÁ¿µÄÄÚ´æ±»Õ¼ÓÃ

ÓÐʱºò£¬¿Í»§¶ËÇëÇóÐèÒªµÈ´ý¿ÉÓõÄÏß³ÌÀ´´¦ÀíËüÃǵÄÇëÇó

ÀË·Ñ´óÁ¿µÄʱ¼ä´¦ÀíI/O×èÈûµÄÈÎÎñ

Node JSÌåϵ½á¹¹¡ª¡ªµ¥Ïß³ÌʼþÑ­»·

Node JSƽ̨²»×ñÑ­¡±¶àÏß³ÌÎÞ״̬µÄÇëÇó/ÏìӦģÐÍ¡°£¬¶øÊDzÉÓõ¥Ïß³ÌʼþÑ­»·Ä£ÐÍ¡£ËüµÄ´¦ÀíÄ£ÐÍÖ÷ÒªÊÇ»ùÓÚJavaScript»ù±¾Ê¼þÄ£Ðͺͻص÷º¯Êý»úÖƵĽáºÏ¡£

ÄãÓ¦¸Ã¶ÔJavaScriptʼþºÍ»Øµ÷º¯Êý»úÖÆÈçºÎÔË×÷ÓÐÁ˽ϺõÄÁ˽⡣Èç¹ûûÓУ¬ÇëÔÚÔĶÁÏÂÃæµÄÄÚÈÝÇ°ÓÅÏÈÁ˽â»ù±¾ÄÚÈÝ£¬ÒÔ°ïÖúÀí½â¡£

ÓÉÓÚNode JS×ñÑ­Õâ¸öÌåϵ£¨µ¥Ïß³ÌʼþÑ­»·£©¡£Òò´ËËü¿ÉÒÔÇáËɵش¦ÀíÔ½À´Ô½¶àµÄ¿Í»§¶Ë²¢·¢ÇëÇó¡£ÔÚÌÖÂÛÆäÄÚ²¿»úÀíÇ°£¬ÎÒÃÇÏÈͨ¹ýÏÂÃæµÄͼ½øÐиÅÀÀ¡£

Æä´¦ÀíµÄÖ÷ÒªºËÐÄÊÇ¡°Ê¼þÑ­»·¡±£¨Event Loop£©¡£Èç¹ûÁ˽âÁËÕâ¸ö£¬ÄÇôÃ÷°×ËüÄÚ²¿»úÖƾͻáÏà¶ÔÇáËÉһЩ¡£

¡±µ¥Ïß³ÌʼþÑ­»·Ä£ÐÍ¡°µÄ´¦Àí²½Öè

¿Í»§¶ËÏò·þÎñ¶Ë·¢ËÍÇëÇó

Node JS·þÎñ¶ËÔÚÄÚ²¿Î¬»¤Ò»¸öÓиöÊýÏÞÖƵÄÏ̳߳أ¬Îª¿Í»§¶ËµÄÇëÇóÌṩ·þÎñ

Node JS·þÎñ¶ËÑ­»·¼àÌýÀ´×Ô¿Í»§¶ËµÄÇëÇ󣬲¢½«ËüÃÇ·ÅÖõ½Ò»¸ö¶ÓÁÐÖУ¬Õâ¸ö¶ÓÁб»³ÆΪ¡°Ê¼þ¶ÓÁС±£¨Event Queue£©¡£

Node JSÄÚ²¿´æÔÚÒ»¸ö½Ð×ö¡°Ê¼þÑ­»·¡±£¨Event Loop£©µÄ×é¼þ¡£Ëüͨ¹ýÎÞÏÞÑ­»·À´½ÓÊÕÇëÇó²¢½øÐд¦Àí¡££¨¿ÉÒÔͨ¹ýÏÂÃæµÄJavaα´úÂë¼ÓÉîÁ˽⣩

ʼþÑ­»·×é¼þֻʹÓõ¥Ï̡߳£ËüÊÇNode JSƽ̨´¦ÀíÄ£Ð͵ĺËÐÄ

ʼþÑ­»·×é¼þ»á¼ì²éËùÓÐÔÚʼþ¶ÓÁÐÖеĿͻ§¶ËÇëÇó¡£Èç¹ûûÓУ¬Ôò¼ÌÐøµÈ´ýÇëÇó¡£

Èç¹û´æÔÚÇëÇó£¬Ôò´Óʼþ¶ÓÁÐÖÐÌáÈ¡Ò»¸öÇëÇó

¿ªÊ¼´¦Àí¸ÃÇëÇó

Èç¹û¸ÃÇëÇó²»ÐèÒªI/O×èÈûµÄ²Ù×÷£¬Ôò´¦Àí±ØÐëµÄ¹¤×÷£¬×¼±¸ÏìÓ¦µÄÄÚÈÝ£¬²¢½«×¼±¸¾ÍÐ÷µÄÏìÓ¦·¢Ë͸ø¿Í»§¶Ë

Èç¹û¸ÃÇëÇóÐèÒªI/O×èÈûµÄ²Ù×÷£¬ÈçÓëÊý¾Ý¿â£¨Database£©£¬Îļþϵͳ£¨file system£©£¬Íⲿ·þÎñ£¨ external services£©µÈ£¬ÔòʹÓò»Í¬µÄ´¦ÀíÁ÷³Ì

¼ì²âÄÚ²¿Ï̳߳ØÊÇ·ñ´æÔÚ¿ÉÓÃÏß³Ì

Èç¹ûÓУ¬Ôò´ÓÄÚ²¿Ï̳߳ØÌáÈ¡Ò»¸öỊ̈߳¬²¢½«Æä·ÖÅä´¦Àí¿Í»§¶ËµÄÇëÇó

Ï̸߳ºÔð¶ÁÈ¡£¬¶ÁÈ¡£¬´¦Àí¿Í»§¶ËÇëÇó£¬Ö´ÐÐÈκÎI/O×èÈûµÄ²Ù×÷£¬×¼±¸ÏìÓ¦µÄÄÚÈÝ£¬²¢½«×¼±¸¾ÍÐ÷µÄÏìÓ¦·¢Ë͸øʼþÑ­»·×é¼þ

¸ÃÏ߳̽«»á¸ºÔð¶ÁÈ¡£¬´¦Àí¿Í»§¶ËÇëÇó£¬Ö´ÐÐÈκÎI/O×èÈûµÄ²Ù×÷£¨Èç¹ûÐèÒªµÄ»°£©£¬ÒÔ¼°×¼±¸ÏìÓ¦µÄÄÚÈÝ

¸ÃÏ߳̽«×¼±¸¾ÍÐ÷µÄÏìÓ¦·¢Ë͸øWeb·þÎñ¶Ë

ʼþÑ­»·×é¼þÒÀ´Î½«ÏìÓ¦»ØÖ´¸ø¿Í»§¶Ë

ͼʾÃèÊö£º

ÕâÀïÓС°n¡°¸ö¿Í»§¶ËÏò·þÎñ¶Ë·¢ËÍÇëÇ󣬼ÙÉèËüÃÇÊDz¢·¢½øÈëWebÓ¦ÓóÌÐò

¼ÙÉè¿Í»§¶Ë·Ö±ðΪClient-1£¬Client-2¡­¡­£¬Client-n

Web·þÎñ¶Ëά»¤Ò»¸öÓиöÏÞµÄÏ̳߳ء£¼ÙÉèÔÚÏ̳߳ØÖеÄÏ̸߳öÊýÊÇ¡±m¡±

Node JS·þÎñ¶Ë½ÓÊÕÇëÇóClient-1£¬Client-2¡­¡­£¬Client-n£¬²¢½«ËüÃÇ·ÅÈëʼþ¶ÓÁÐ

Node JSµÄʼþÑ­»·×é¼þÒÀ´ÎÌáÈ¡ÕâЩÇëÇó

ʼþÑ­»·×é¼þÑ¡Ôñ¿Í»§¶ËClient-1µÄRequest-1ÇëÇó

¼ì²â¸ÃÇëÇóÊÇÐèÒªI/O×èÈû²Ù×÷»¹ÊǸ´ÔӵļÆËãÈÎÎñ

Èç¹ûÖ»ÊǼòµ¥µÄ¼ÆËã¶øÎÞI/O×èÈûÈÎÎñ£¬Ôò²»ÐèÒª¶îÍâµÄÏß³ÌÈ¥´¦Àí

ʼþÑ­»·×é¼þÖ´ÐÐÇëÇóÖÐÌṩµÄËùÓÐÔËË㣨ÕâÀïµÄÔËËãÊÇÖ¸JavaScriptµÄ·½·¨£©²¢ÇÒ×¼±¸ÏìÓ¦Response-1

ʼþÑ­»·×é¼þ½«Response-1»ØÖ´¸øClient-1

ʼþÑ­»·×é¼þÑ¡Ôñ¿Í»§¶ËClient-2µÄRequest-2ÇëÇó

¼ì²â¸ÃÇëÇóÊÇÐèÒªI/O×èÈû²Ù×÷»¹ÊǸ´ÔӵļÆËãÈÎÎñ

Èç¹ûÖ»ÊǼòµ¥µÄ¼ÆËã¶øÎÞI/O×èÈûÈÎÎñ£¬Ôò²»ÐèÒª¶îÍâµÄÏß³ÌÈ¥´¦Àí

ʼþÑ­»·×é¼þÖ´ÐÐÇëÇóÖÐÌṩµÄËùÓÐÔËË㣨ÕâÀïµÄÔËËãÊÇÖ¸JavaScriptµÄ·½·¨£©²¢ÇÒ×¼±¸ÏìÓ¦Response-2

ʼþÑ­»·×é¼þ½«Response-2»ØÖ´¸øClient-2

ʼþÑ­»·×é¼þÑ¡Ôñ¿Í»§¶ËClient-nµÄRequest-nÇëÇó

¼ì²â¸ÃÇëÇóÊÇÐèÒªI/O×èÈû²Ù×÷»¹ÊǸ´ÔӵļÆËãÈÎÎñ

ÓÉÓÚ¸ÃÇëÇóÊǸ´ÔÓµÄÔËËã»òI/O×èÈûÈÎÎñ£¬Òò´ËʼþÑ­»·×é¼þ²»È¥´¦Àí

ʼþÑ­»·×é¼þ´ÓÄÚ²¿Ï̳߳ØÌáÈ¡Ïß³ÌT-1£¬²¢·ÖÅäÆäÈ¥´¦ÀíÇëÇóRequest-nµÄÈÎÎñ

Ïß³ÌT-1´¦ÀíÇëÇóRequest-n£¬Ö´ÐбØÒªµÄI/O×èÈûºÍ¼ÆËãÈÎÎñ£¬²¢×¼±¸ÏìÓ¦Response-n

Ïß³ÌT-1½«ÏìÓ¦Response-n»ØÖ´¸øʼþÑ­»·×é¼þ

ʼþÑ­»·×é¼þ°´ÕÕ´ÎÐò½«Response-n»ØÖ´¸øClient-n

ÕâÀïµÄ¿Í»§¶ËÇëÇóÊÇÒ»¸ö»ò¶à¸öJavaScriptº¯Êý¡£¸Ãº¯Êý¿ÉÒÔµ÷ÓÃÆäËûº¯Êý»òÊÇʹÓûص÷º¯Êý£¨Callback function£©

ÿ¸ö¿Í»§¶ËÇëÇó¸ñʽÈçÏÂËùʾ£º

function£¨other-functioncall£¬ callback-function)

ÀýÈ磺

function1(function2,callback1);
function2(function3,callback2);
function3(input-params);

×¢Ò⣺

Èç¹ûÄã²»Àí½âÕâЩº¯ÊýÊÇÈçºÎÖ´Ðеģ¬ÄÇô¿ÉÄÜÄã¶ÔJavaScriptµÄº¯ÊýºÍ»Øµ÷»úÖƲ»¹»ÊìϤ

ÎÒÃÇÓ¦¸Ã¶ÔJavaScriptº¯ÊýºÍ»Øµ÷»úÖÆÓÐËùÁ˽⡣Òò´ËÔÚ¿ªÊ¼¿ª·¢Node JSÓ¦ÓÃÇ°ÇëÏÈͨ¹ýÍøÉϵÄÏà¹Ø½Ì³Ì½øÐÐѧϰ

Node JSÌåϵ½á¹¹¡ª¡ªµ¥Ïß³ÌʼþÑ­»·µÄÓŵã

Äܹ»ÇáËÉ´¦ÀíÔ½À´Ô½¶àµÄ¿Í»§¶ËÇëÇó

ÒòΪÓÐʼþÑ­»·×é¼þ£¬Òò´Ë¼´Ê¹Node JSÓ¦ÓýÓÊÕµ½Ô½À´Ô½¶àµÄ¿Í»§¶Ë²¢·¢ÇëÇóʱ£¬Ò²ÎÞÐè´´½¨¸ü¶àµÄÏß³Ì

ÓÉÓÚʹÓýÏÉÙµÄỊ̈߳¬Òò´Ë¿ÉÒÔ¼õÉÙ×ÊÔ´ºÍÄÚ´æµÄʹÓÃ

ʼþÑ­»·µÄα´úÂë

ÓÉÓÚÎÒÊÇÒ»¸öJava¿ª·¢ÈËÔ±£¬ÎÒ³¢ÊÔʹÓÃJavaÊõÓï½âÊÍ¡°Ê¼þÑ­»·ÊÇÈçºÎ¹¤×÷µÄ¡±¡£Õâ²¢·ÇÊÇ´¿ÕýµÄJava´úÂ룬ÎÒ²Âÿ¸öÈ˶¼¿ÉÒÔÃ÷°×¡£Èç¹ûÄãÔÚÀí½âÉÏÓÐÈκÎÎÊÌ⣬ÇëÔÚÆÀÂÛÖиæËßÎÒ¡£

public class EventLoop {
while(true){
if(Event Queue receives a JavaScript Function Call){
ClientRequest request = EventQueue.getClientRequest();
If(request requires BlokingIO or takes more computation time)
Assign request to Thread T1
Else
Process and Prepare response
}
}
}

Õâ¾ÍÊǹØÓÚNode JSÌåϵ½á¹¹ºÍµ¥Ïß³ÌʼþÑ­»·µÄÈ«²¿ÄÚÈÝ¡£

   
3126 ´Îä¯ÀÀ       18
Ïà¹ØÎÄÕÂ

Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
Öع¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
Ïà¹ØÎĵµ

Öع¹-¸ÄÉƼÈÓдúÂëµÄÉè¼Æ
Èí¼þÖع¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
Ïà¹Ø¿Î³Ì

»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì