±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÍøÂç
,½ñÌìÈÃÎÒÃÇÀ´Á˽â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Ìåϵ½á¹¹ºÍµ¥Ïß³ÌʼþÑ»·µÄÈ«²¿ÄÚÈÝ¡£ |