Õ¾ÄÚËÑË÷: ÇëÊäÈëËÑË÷¹Ø¼ü´Ê

µ±Ç°Ò³Ãæ: ¿ª·¢×ÊÁÏÊ×Ò³ ¡ú Java רÌâ ¡ú ÓÃRMI¿ª·¢»ùÓÚJavaµÄÆóÒµ·Ö²¼Ê½Ó¦ÓÃ

ÓÃRMI¿ª·¢»ùÓÚJavaµÄÆóÒµ·Ö²¼Ê½Ó¦ÓÃ

ÕªÒª: Ò»ÖÖ»ùÓÚJavaµÄÔ¶³Ì·½·¨µ÷ÓÃ(RMI)Ϊ¿ª·¢ÆóÒµ·Ö²¼Ê½Ó¦ÓÃÌṩÁËÐÐÖ®ÓÐЧµÄ½â¾ö·½°¸
¡¡¡¡Õª Òª ÓÉÓÚJava¾ßÓпçƽ̨¡¢´úÂë¿ÉÒÆÖ²ÐÔ¡¢°²È«¸ßЧµÈ¹ã·º¶øÇ¿´óµÄ¹¦ÄÜ£¬Òò¶øÔÚ¿ª·¢ÍøÂç·Ö²¼Ê½Ó¦ÓõÄʱºò£¬¿ÉÒÔÓÃËü×ÔÉíµÄ»úÖÆʵÏÖ·Ö²¼Ê½¼ÆË㣬һÖÖ»ùÓÚJavaµÄÔ¶³Ì·½·¨µ÷ÓÃ(RMI)ΪÎÒÃÇ¿ª·¢ÆóÒµ·Ö²¼Ê½Ó¦ÓÃÌṩÁËÐÐÖ®ÓÐЧµÄ½â¾ö·½°¸¡£

¡¡¡¡¹Ø¼ü´Ê Java RMI ÆóÒµ·Ö²¼Ê½Ó¦ÓÃ

¡¡¡¡¸ÅÊö

¡¡¡¡Ëæ×ŵçÁ¦ÆóÒµÐÅÏ¢»¯½¨ÉèµÄ²»¶ÏÉîÈëºÍ·¢Õ¹£¬ÆóÒµÄÚ²¿ºÍÆóÒµÓëÆóÒµÖ®¼ä¶ÔÐÅÏ¢¡¢¶ÔÊý¾ÝµÄ½»»»Á¿´ó´óÔö¼Ó£¬ÕâЩÐÅÏ¢ÓëÊý¾ÝÔ½À´Ô½ÐèÒªÔÚ²»Í¬µÄ¼ÆËã»úÍøÂç¼ä´«Ëͺͽ»Á÷¡£Í¬Ê±£¬ÓÉÓÚ¸÷µ¥Î»¡¢¸÷²¿ÃÅÖ®¼äµÄÏÖ´æµÄ¼ÆËã»úÍøÂçÓ²¼þÉ豸Óë²Ù×÷ϵͳǧ²îÍò±ð£¬Ó¦ÓÃˮƽҲ²Î²î²»Æ룬Òò´Ë£¬¿ª·¢³ö¿çƽ̨¡¢¿ÉÒÆÖ²¡¢¸ßЧ°²È«µÄÍøÂç·Ö²¼Ê½Ó¦ÓÃÀ´·þÎñÓÚµçÁ¦ÆóÒµ£¬¾ÍÏÔµÃÓÈΪÖØÒª¡£

¡¡¡¡ÔÚµ±½ñµÄ±à³ÌÊõÓïÀ·Ö²¼Ê½¼ÆËãÒѾ­³ÉΪºÜ³£¼ûµÄ´Ê£¬Ëü½«ÆóÒµµÄÒµÎñÊý¾ÝºÍ³ÌÐò·Ö²¼ÔÚÍøÂçµÄ²»Í¬ÎïÀíλÖÃÉÏ£¬Í¨¹ýµ÷¶¯ÍøÂçÉ϶ą̀¼ÆËã»úµÄ´¦ÀíÄÜÁ¦£¬·¢»ÓÔ¶³Ìµ÷ÓÃÊý¾ÝµÄ¹¦ÄÜ¡£

¡¡¡¡Ô¶³Ì·½·¨µ÷ÓÃ(Remote Method Invocation ,RMI)£¬¿ÉÒÔÔÚ²»Í¬µÄJavaÐéÄâ»ú(JVM)Ö®¼äʵÏÖ¶ÔÏóÓë¶ÔÏóµÄͨÐÅ¡£JVM¿ÉÒÔλÓÚÏàͬ»ò²»Í¬¼ÆËã»úÉÏ£¬ÔÚ¶à¸öJVMÖУ¬Ò»¸öJVM¿ÉÒÔµ÷Óô洢ÔÚÆäËüJVMµÄ¶ÔÏóµÄ·½·¨¡£

¡¡¡¡±¾ÎÄÖ÷Òª½éÉÜRMIµÄÌص㣬·ÖÎöÓ¦ÓÃRMI½øÐÐÆóÒµ·Ö²¼Ê½¼ÆËãµÄÔ­Àí£¬ÒÔ¼°ÀûÓÃRMIʵÏÖ»ùÓÚJavaµÄÆóÒµ·Ö²¼Ê½Ó¦ÓõľßÌå²½Öè¡£

¡¡¡¡Ô¶³Ì·½·¨µ÷ÓÃ(RMI)µÄÌصã

¡¡¡¡1¡¢TCP±à³ÌµÄȱµã

¡¡¡¡ÓÉÓÚJava±à³ÌÓïÑÔÉè¼ÆÖ®³õ¾ÍÊÇÃæÏò¶ÔÏóºÍÖ§³ÖÍøÂçµÄ£¬Òò´Ë£¬»ùÓÚ¶ÔÏóµÄRMI»úÖÆÒѾ­ÄÚÖÃÔÚJavaƽ̨ÖС£

¡¡¡¡ÎÒÃǾ­³£»áÔÚÍøÂ翪·¢ÖÐʹÓÃTCP/IP±à³Ì£¬ÕâÑù£¬×ÔÈ»¶øÈ»µØ¾Í»áÉæ¼°µ½Socket£¨Ì×½Ó×Ö£©±à³Ì¡£µ«ÊÇ£¬Ê¹ÓÃSocket±à³ÌÐèÒª´óÁ¿Öظ´±àÂ룬ÔÚ¸´ÔÓ·Ö²¼Ê½²Ù×÷ʱÏԵ÷dz£Âé·³£¬¶øÇÒÒ×ÓÚ³ö´í¡£Òò´Ë£¬ÈçºÎ¿ìËÙ¡¢¸ßЧ¡¢°²È«¡¢¿ÉÀ©Õ¹µØ½øÐÐÍøÂç·Ö²¼Ê½¼ÆË㣬ÊÇ¿ª·¢ÕßÃÇÒ»¹á×·ÇóºÍ³«µ¼µÄÖ÷Ìâ¡£Ö±µ½RMIµÄ³öÏÖ£¬ÕâÖÖ·±ÔÓ¡¢µÍЧµÄ¿ª·¢Çé¿ö²ÅÓкܴó¸Ä¹Û¡£

¡¡¡¡2¡¢RMI±à³ÌµÄÌصã

¡¡¡¡µ±ÎÒÃÇÀûÓöÔÏóÐòÁл¯ÔÚÍøÂçÉÏ·ÖÅä¶ÔÏóʱ£¬RMIÌṩÁË·ÇJavaƽ̨ÎÞ·¨Æ¥µÐµÄ¶ÀÌضøÇ¿´óµÄ·Ö²¼Ê½¼ÆËãÄ£ÐÍ£¬RMIÖ÷ÒªÓÐÒÔÏÂÌص㣺

¡¡¡¡ ¿Í»§»ú¿ÉÒÔÏò±¾µØ·½·¨Ò»Ñùµ÷ÓÃÔ¶³Ì·þÎñÆ÷Éϵķ½·¨£»

¡¡¡¡ ¿ÉÒÔ¸ù¾Ý½Ó¿ÚÖ¸¶¨¿Í»§»ú/·þÎñÆ÷±à³ÌºÏÔ¼£»

¡¡¡¡ ¿ÉÒÔ´Ó·þÎñÆ÷¶ÔÏóȱʡ¶þ½øÖÆÀàÎļþ£¬×Ô¶¯Éú³Éµ÷¶¯/·´µ÷¶¯´úÂ룻

¡¡¡¡ ½«Java±à³ÌÄ£ÐÍÀ©Õ¹µ½»úÆ÷±ß½ç(ºÍJavaÐéÄâ»ú(JVM)±ß½çÖ®Íâ)£¬² »ÐèÒªÈκÎÌØÊâÓï·¨£»

¡¡¡¡ »¹¿ÉÒÔºÍÒ»¸öÔ¶³Ì·½·¨µ÷ÓÃÖеÄÊý¾Ýͬʱ´«ÊäÐÐΪ(´úÂë)¡£

¡¡¡¡¾¡¹ÜRMI²»ÊÇΨһµÄÆóÒµ¼¶Ô¶³Ì¶ÔÏó·ÃÎÊ·½°¸£¬µ«ËüÈ´ÊÇ×îÈÝÒ×ʵÏֵġ£

¡¡¡¡3¡¢RMIÓëCORBA

¡¡¡¡×÷Ϊ·Ö²¼Ê½Ó¦ÓóÌÐò¿ò¼ÜµÄ¹æ·¶£¬COBRAÊ×µ±Æä³å£¬ËüÊÇÓɶÔÏó¹ÜÀí×éÖ¯(OMG)¿ª·¢µÄ¡£ÓëCORBA²»Í¬µÄÊÇ£¬CORBAÄܹ»ÀûÓò»Í¬±à³ÌÓïÑÔ£¨ÀýÈçC/C++¡¢BasicµÈ£©¿ª·¢ÊµÏÖ·Ö²¼Ê½Ó¦Ó㬶øRMIÊÇÒ»ÖÖ´¿Java½â¾ö·½°¸¡£ÔÚRMIÖУ¬³ÌÐòµÄËùÓв¿·Ö¶¼ÓÉJavaÓïÑÔ±àд£¬ÕâÑù£¬¿ª·¢³öÀ´µÄ³ÌÐòÍêÈ«·ûºÏJava¹æ·¶£¬±ãÓÚʵÏÖ¿çƽ̨·ÃÎÊ¡¢À©Õ¹ºÍÒÆÖ²¡£°´ÕÕ±ÊÕßËùÔÚÎ÷±±µçÁ¦½¨É輯ÍŹ«Ë¾µÄÇé¿ö¿´£¬·þÎñÆ÷²Ù×÷ϵͳÖ÷ÒªÓÐLinuxºÍWindows2000 Server£¬·Ö±ð´æÔÚÓÚ¹«Ë¾ºÍ²¿Ãŵ±ÖУ¬ËüÃÇÊDz»Í¬µÄϵͳƽ̨£»Í¬Ê±£¬¹«Ë¾ÏÂÊô¸÷¸ö¹¤³ÌÏîÄ¿²¿ÓÖ¾àÀëºÜÔ¶£¬½üµÄ¼¸Ê®¹«ÀԶÔò´ïµ½ÉÏǧ¹«ÀïÉõÖÁλÓÚ¹úÍ⣬Òò´Ë¿çƽ̨ºÍÔ¶³Ì·ÃÎÊÕâÁ½´ó¹¦ÄÜÔÚ¿ª·¢ÆóÒµÓ¦ÓÃϵͳʱ¾Í±ØÐ뿼ÂÇ£¬¶øRMIÇ¡Ç¡Äܹ»ÓÃËüµÄ×ÔÉíÌصãÀ´Âú×ã±à³ÌÐèÒª¡£

¡¡¡¡RMI»ù±¾Ìåϵ½á¹¹¼ò½é

¡¡¡¡RMIͨ¹ýTCP/IPÔÚÄÚ²¿Ê¹ÓÃSocket£¬ÏóÆäÃû³Æ°µÊ¾µÄÄÇÑù£¬ËüÄܹ»°ïÖúÎÒÃDzéÕÒ²¢Ö´ÐÐÔ¶³Ì¶ÔÏóµÄ·½·¨¡£RMIµÄÄ¿µÄÊÇÈÃλÓÚ²»Í¬JVMÖеĶÔÏó£¬ÔÚÍâ¹Û¼°ÐÐΪÉ϶¼ÏñÊDZ¾µØµÄ¶ÔÏó¡£

¡¡¡¡Í¨³££¬ÎÒÃǰѵ÷ÓÃÕâÖÖÔ¶³Ì¶ÔÏóµÄJVM£¬³ÆΪ¿Í»§»ú£»¶ø°Ñ°üÀ¨ÕâÖÖÔ¶³Ì¶ÔÏóµÄJVM£¬³ÆΪ·þÎñÆ÷¡£

¡¡¡¡¾¡¹Ü¶ÔÒ»¸öÔ¶³Ì¶ÔÏóµÄÒýÓúͻñµÃ¶Ô±¾µØ¶ÔÏóµÄÒýÓÃÓÐËù²»Í¬£¬µ«ÎÒÃÇ¿ÉÒÔ°ÑÔ¶³Ì¶ÔÏóÏñ±¾µØ¶ÔÏóÒ»ÑùʹÓá£Ó¦ÓóÌÐò²¢²»ÖªµÀÒ»¸ö¶ÔÏóÊÇÔ¶³ÌµÄ»¹ÊDZ¾µØµÄ¡£Êµ¼ÊÉÏ£¬Ô¶³Ì¶ÔÏóÉϱ»µ÷Óõķ½·¨Óë±¾µØ¶ÔÏóÉϵ÷Óõķ½·¨£¬¾ßÓÐÏàͬµÄÓï·¨½á¹¹¡£

¡¡¡¡×÷ΪRMIµÄµ×²ã£¨»á°üº¬¸´ÔÓµÄSocket²Ù×÷£©£¬Ëü»á×Ô¶¯½Ø»ñ·½·¨µ÷Óã¬ÕÒµ½Ô¶³Ì¶ÔÏó£¬È»ºó´¦ÀíÔ¶³ÌÇëÇó¡£±ÊÕßÈÏΪ£¬RMIÉè¼ÆµÄÖØÒªÖ®´¦£¬¾ÍÔÚÓÚ²»µ«ÔÚÉè¼ÆÉÏʵÏÖÁËÔ¶³Ì·ÃÎʹ¦ÄÜ£¬¶øÇÒʵÏÖÁËÉè¼ÆµÄ͸Ã÷ÐÔ¡£

¡¡¡¡RMIµÄ»ù±¾Ìåϵ½á¹¹£¬¸ÅÀ¨ÆðÀ´Ëµ£¬ÓÉÈý¸ö³éÏó²ã×é³É£º

¡¡¡¡1¡¢´æ¸ù/¿ò¼Ü²ã(Stubs/Skeletons Layer)

¡¡¡¡RMIΪÎÒÃÇÒýÈëÁËÁ½ÖÖÌØÊâÀàÐ͵ĶÔÏ󣬳ÆΪ´æ¸ù(Stub)ºÍ¿ò¼Ü(Skeleton),ËüÃÇ×é³ÉÁËRMIµÄµÚÒ»²ã¡£

¡¡¡¡ÔÚÔ¶³ÌͨÐŵÄʱºò£¬ÒªÀûÓÃTCP/IPЭÒ飬×öºÜ¶àµ×²ãÊý¾ÝµÄ´ò°ü´«Êä¡£ÔËÓÃJava¼¼Êõ£¬ÎÒÃÇÏÈÒª°ÑÊý¾Ý»òÕ߶ÔÏóת»»³É×Ö½ÚÁ÷(byte stream)£¬±ãÓÚÍøÂç´«Ê䣬Õâ¸ö¹ý³Ì½Ð»ã¼¯(marshaling)£»µ±ÊÕµ½Ô¶³Ì´«À´µÄ×Ö½ÚÁ÷ºó£¬ÎÒÃÇÒª°ÑÁ÷ÐÅϢת»»³É¶ÔÏó»òÕßÊý¾Ý£¬Õâ¸ö¹ý³Ì½Ð½â¶Á(unmarshaling),ËüÓë»ã¼¯¸ÕºÃÏà·´¡£
¡¡¡¡StubºÍSkeleton²ãλÓÚʵ¼ÊÓ¦ÓóÌÐò֮ϣ¬½¨Á¢ÔÚProxy£¨´úÀí£©Éè¼Æ·½°¸Ö®ÉÏ¡£StubÀàµÄ×÷ÓÃÊÇÔ¶³Ì·þÎñÆ÷ʵÏֵĴúÀíµÄ½ÇÉ«£¬StubÊÇ¿Í»§·½¶ÔÏó£»SkeletonÀàÓÃÓÚ°ïÖú¶ÔÏóͨ¹ýRMIÁ´½ÓÓëStubͨÐÅ£¬Ëü´ÓÁ´Â·ÖжÁÈ¡·½·¨µ÷ÓõIJÎÊý£¬ÏòÔ¶³Ì·þÎñʵÏÖ¶ÔÏó½øÐе÷Ó㬽ÓÊÜ·µ»ØÖµ£¬È»ºóÔÙ°Ñ·µ»Øֵд»Øµ½Stub¡£

¡¡¡¡2¡¢Ô¶³ÌÒýÓòã(Remote Reference Layer)

¡¡¡¡Ô¶³ÌÒýÓò㶨ÒåºÍÖ§³Ö×ÅRMIÁ¬½ÓµÄµ÷ÓÃÓïÒå(semantics)¡£

¡¡¡¡RMI½øÐÐÔ¶³Ì·ÃÎÊÒªÓõ½JRMP(Java Remote Method Protocol,¼´JavaÔ¶³Ì·½·¨Ð­Òé)£¬ÕâÒ»²ãÌṩרÓÃÓÚJRMPµÄRemoteRef¶ÔÏó£¬ËüλÓÚjava.rmi.server°üÄÚ£¬´ú±í×ÅÔ¶³Ì¶ÔÏóµÄÒ»¸ö¾ä±ú¡£RemoteRefʹÓÃÔ¶³ÌÒýÓÃÀ´Ö´ÐÐÔ¶³Ì¶ÔÏóµÄÒ»¸öÔ¶³Ì·½·¨µ÷Óá£

¡¡¡¡3¡¢´«Êä²ã(Transport Layer)

¡¡¡¡´«Êä²ãÔÚJVMÖ®¼ä½¨Á¢»ùÓÚÁ÷µÄÍøÂçÁ¬½Ó£¬²¢ÇÒ¸ºÔðÉèÖú͹ÜÀíÕâЩÁ¬½Ó¡£Õâʱºò£¬RMIʹÓÃÒ»ÖÖÏß¼¶(wire-level)ЭÒé½øÐлùÓÚTCP/IPµÄÁ¬½Ó£¬¸ÃЭÒé¾ÍÊÇJavaÔ¶³Ì·½·¨Ð­Òé(JRMP,¼´Java Remote Method Protocol)¡£

¡¡¡¡ÔÚJDK°æ±¾1.2¿ªÊ¼£¬JRMP²»ÔÙÐèÒªSkeleton,¶øÊÇʹÓÃreflectionÀ´½¨Á¢ÓëÔ¶³Ì·þÎñµÄÁ¬½Ó¡£ÎªÁËÉú³ÉStub£¬ÎÒÃÇÐëÓÃrmic¡£
µ±Ç°µÄRMIʵÏÖÖУ¬´«Êä²ã½¨Á¢ÔÚTCP/IP»ù´¡ÉÏ£¬Éè¼ÆÓÃÓÚÔÚ¿Í»§ºÍ·þÎñÆ÷Ö®¼ä½¨Á¢Ò»ÌõÁ¬½Ó£¨¼´Ê¹ÁªÍøÓÐÕÏ°­£©¡£




¡ü·µ»ØĿ¼
ǰһƪ: J2SE5.0ÐÂÌØÐÔÖ®ProcessBuilder
ºóһƪ: J2SE5.0ÐÂÌØÐÔ֮ʹÓôúÀí·þÎñÆ÷