6 12, 2004
Ruby·Ö²¼Ê½¶ÔÏó
Ruby¶Ô´ËÓÐÒ»¸ö¼òµ¥µÄ½â¾ö·½·¨£¬Ïû³ýÁËÉÏÃæ·½·¨µÄ·±ËöÖ®´¦¡£·Ö²¼Ê½Ruby£¨Ò²½Ðdrb»òÕßdruby£©ÊÇÒ»¸ö¶ÀÁ¢µÄ¿â£¬ÍêÈ«ÓÉRubyд³É£¬Í¨¹ýÕâ¸ö¿â£¬Äã¿ÉÒÔͨ¹ýTCPÔÚ²»Í¬µÄRuby½ø³ÌÖд«Ë͸÷ÖÖ¶ÔÏó£¨Ruby¶ÔÏ󣩣¬¶øÇÒÖ»ÐèÒªºÜÉٵIJ½Öè¡£
Çåµ¥8ÏÔʾÁËÕâÑùµÄÒ»¸öÀý×Ó£¬Õâ¸ö·þÎñ¶Ë¹²ÏíÁËÒ»¸ö¶ÔÏó£¬Í¨¹ýÕâ¸ö¶ÔÏó£¬Äã¿ÉÒԵõ½·þÎñÆ÷µÄʱ¼ä¡£µÚ3Ðе½µÚ7Ðж¨ÒåÁËÕâ¸öÈ¡µÃ±¾µØÊ±¼äÒª±»¹²ÏíµÄ¶ÔÏ󣬵Ú9Ðн«Õâ¸ö¶ÔÏó°ó¶¨µ½Ò»¸ödrb·þÎñÆ÷£¨±¾ÀýÖж˿ÚΪ2222£©£¬ÒòΪ·þÎñÆ÷³ÌÐòÔÚÒ»¸ö¶ÀÁ¢µÄỊ̈߳¬ËùÒÔµÚ10ÐÐÈ·±£Ö÷³ÌÐò»áÔÚÕâ¸öÏ߳̽áÊøºó²ÅÄÜÍ˳ö¡£
¡¡
Çåµ¥8: A simple distributed Ruby server 1 require 'drb'
2
3 class Info
4 def get_time
5 "It is now #{Time.now}"
6 end
7 end
8
9 DRb.start_service("druby://your.host.name:2222", Info.new)
10 DRb.thread.join
|
Çåµ¥9ÊÇÒ»¸ö¿Í»§¶Ë³ÌÐò£¬Ò²·Ç³£¼òµ¥£¬µÚ4ÐеÄDRbObject µ÷ÓúÍÔ¶³Ì·þÎñÆ÷½¨Á¢ÁËÒ»¸öÁ¬½Ó£¬·µ»ØÁËÔ¶³Ì¶ÔÏóµÄÒ»¸ö´úÀí£¬È»ºó£¬Äã¾Í¿ÉÒÔÏñµ÷Óñ¾µØ¶ÔÏóÒ»Ñùµ÷ÓÃÔ¶³Ì¶ÔÏóµÄ·½·¨ÁË¡£
¡¡
Çåµ¥9: A simple distributed Ruby client 1 require 'drb' 2 3 DRb.start_service 4 info = DRbObject.new(nil, "druby://your.host.name:2222") 5 6 3.times do 7 puts info.get_time 8 sleep 2 9 end |
¡¡
ÏÂÃæÎÒÃÇÀ´¿´Ò»ÏÂÁíÒ»¸öºÜÓÐÒâ˼µÄ¶«Î÷tuplesapces£¬ËüÊÇDavid GelernterÔÚLindaϵͳÖÐÊ×ÏÈÌá³öÀ´µÄ£¬tuplespacesÏñÒ»¸ö¹²ÏíµÄbbsϵͳ£¬³ÌÐò¿ÉÒÔÏòËüÌùÏûÏ¢£¬»òÕß´ÓËüÈ¡µÃÏûÏ¢£¬ÕâÀïËù˵µÄÏûÏ¢¶¼ÊÇһЩֵ×é³ÉµÄÊý×é¡£out·½·¨ÓÃÀ´ÏòtuplespaceдÏûÏ¢£¬ËùÒÔ£¬ÏÂÃæµÄ´úÂë´úÂë´´½¨ÁËÒ»¸öº¬ÓÐ4ÌõÄÚÈݵÄtuplespace£º
¡¡
require 'tuplespace' ts = TupleSpace.new ts.out [ "dave", "car", "blazer" ] ts.out [ "dave", "computer", "dell" ] ts.out [ "andy", "car", "explorer" ] ts.out [ "andy", "os", "linux" ]
ʹtuplespacesÓÐȤµÄÊÇÄãÒªÏëÈ¡µÃËüÀïÃæµÄÄÚÈÝ£¬Äã²»ÊǸù¾ÝµØÖ·À´È¡£¬¶øÊǸù¾ÝÄÚÈݱ¾Éí£¨Í¨¹ýÆ¥Å䣩À´È¡¡£RubyʵÏÖµÄtuplespace¸ü¼ÓÇ¿´ó£¬È¡µÃÏûÏ¢µÄÆ¥Åäģʽ¿ÉÒÔÊÇÖµ£¬¶ÔÏóµÄÀ࣬ÕýÔò±í´ïʽ£¬rangeµÈµÈ¡£nil±íʾÄã²»¹ØÐÄËüµÄÄÚÈÝÊÇʲô£¬¼´±íʾÈκζ«Î÷¶¼Æ¥Åänil¡£ÒªÏëÈ¡µÃÏûÏ¢ÄÚÈÝ¿ÉÒÔÓÃin·½·¨£¬Èç¹ûin·½·¨ÖÐÖ¸¶¨µÄģʽÄÜÔÚtuplespaceÖÐÕÒµ½Æ¥ÅäµÄÏÄÇôÕâ¸öÆ¥ÅäµÄÏ±»´ÓtuplespaceÖÐɾ³ý£¬²¢ÇÒ½«ÕâÏî·µ»Ø¸øµ÷ÓÃÕߣ»·ñÔòµÄ»°£¬in½«µÈ´ýÖ±µ½ÓÐÆ¥ÅäµÄÏîÄ¿³öÏÖ¡£Èç¹ûÓжà¸ö¼Ç¼ƥÅäinÖÐÖ¸¶¨µÄģʽ£¬ÄÇô½«»áËæ»úµÄ·µ»ØÆäÖеÄÒ»¸ö¼Ç¼¡£
¼ÌÐøÇ°ÃæµÄÀý×Ó£¬ÏÂÃæµÄÀý×Ó´ÓtuplespaceÖжÁÈ¡ÒѾ´æÈëµÄ¼Ç¼£¬×¢Òâ×îºóÒ»¸öÓï¾ä£¬ËüʹÓÃÁËÕýÔò±í´ïʽ×÷ΪƥÅäµÄģʽ¡£
# read one of Dave's possessions res1 = ts.in ["dave", nil, nil] # someone owning a car res2 = ts.in [nil, "car", nil] # a possession containing the "x" or "z" res3 = ts.in [nil, nil, /[xz]/]
´ÓÕâ¸ö¼òµ¥µÄÀý×Ó¿ªÊ¼£¬ÄãÄÜÇáËɵرàд³ö¸´ÔÓ£¬Ð×÷£¬²¢ÐеÄϵͳ¡£
±ÈÈ磬Äã¿ÉÒÔÓÃtuplespace½â¾ö¸´ÔÓµØAIÎÊÌâ¡£Ò»¸ö½ø³Ì¿ÉÒÔͨ¹ý½«Ò»×éÊý¾Ý×éºÏÆðÀ´·Åµ½tuplespaceÖÐÀ´²úÉúÒ»¸öÎÊÌ⣬ÆäËû½ø³ÌÔòͨ¹ýÆ¥Å䵨·½Ê½´ÓtuplespaceÖжÁÈ¡ËüÄܽâ¾öµØÎÊÌ⣻һ¸ö½ø³ÌµÃµ½Ò»¸ö´íÎóµØÊ±ºò£¬ËüÒ²¿ÉÄܰÑÕâ¸öÎÊÌâϸ·ÖΪ¸üСµÄÎÊÌâ £¬È»ºó½«ËüÃǷŵ½tuplespaceÀïÃæ¡£ÆäËüµÄ½ø³ÌÓÖÈ¡µÃÕâ¸öÎÊÌ⣬Ȼºó½â¾öËüÃÇ»òÕß¼ÌÐø·Ö½âÕâЩÎÊÌâ¡£
Õâ¸ö¹ý³Ì½«¼ÌÐø£¬Ö±µ½ËùÓеÄÎÊÌâ¶¼µÃµ½½â¾ö¡£
ΪÁËÍê³ÉÕâÆªÎÄÕ£¬ÎÒÃǽ«Ê¹ÓÃdrbºÍtuplespace±àдһ¸ö¼òµ¥µÄP2PµÄÁÄÌì³ÌÐò£¬Õâ¸öϵͳ½«ÓÉÈý¸öÔªËØ×é³ÉµÄÏûÏ¢´æ·ÅÔÚtuplespaceÖУ¬¼´ÏûÏ¢µÄ·¢ËÍÕߣ¬½ÓÊÕÕߣ¬ºÍÏûÏ¢ÄÚÈÝ¡£
¿Í»§¶ËµÄ³ÌÐòÔÚÇåµ¥10ÖУ¬¿Í»§¶ËÓÉÁ½¸öÏß³ÌÒ»ÆðÔËÐУ¬·¢ËÍÏß³ÌÊÇÖ÷Ị̈߳¬ÔÚËüÀïÃæÏÔʾµÄ´´½¨Á˽ÓÊÕÏ̡߳£·¢ËÍÏ̴߳ӵÚ16Ðе½22ÐУ¬Ëü´ÓÓû§µÄ¿ØÖÆÌ¨¶ÁÈ¡×Ö·û´®£¬¸ñʽÈçÏ£º
to: message text
toÊǽÓÊÕÕßÐÕÃû£¬µÚ17Ðн«ÉÏÃæµÄÊäÈë·Ö³ÉÁ½²¿·Ö£¬Ç°ÃæµÄÊÇÐÕÃû£¬Ê£ÏµÄÊÇÏûÏ¢ÄÚÈÝ¡£È»ºó£¬µÚ19Ðн«Õâ¸öÏûÏ¢×é³ÉÒ»¸öÊý×éдµ½tuplespaceÀïÃæ¡£
¡¡
Çåµ¥10: A chat client based on tuplespaces 1 require 'drb'
2 require 'tuplespace'
3
4 DRb.start_service
5 ts = DRbObject.new(nil, / "druby://server.host:12321")
6
7 my_name = ARGV[0]
8
9 Thread.new do
10 loop do
11 from, unused, line = ts.in / [ nil, my_name, nil ]
12 puts "#{from} says: #{line}"
13 end
14 end
15
16 while line = gets
17 to, text = line.split(/:/, 2)
18 if text
19 ts.out [ my_name, to, text ]
20 else
21 puts '** use "to: message"'
22 end
23 end |
½ÓÊÕÏß³ÌÒ²ºÜ¼òµ¥£¬µÚ9Ðе½14ÐÐÔËÐÐÒ»¸ö¼òµ¥µÄÑ»·£¬´ÓtuplespaceÖжÁÈ¡Êý¾Ý£¬Æ¥ÅäÌõ¼þÊÇÏûÏ¢½ÓÊÕÕßÊÇÎÒÃÇ×Ô¼ºµÄÃû×Ö£¬È»ºó½«½á¹û´òÓ¡ÔÚ¿ØÖÆÌ¨ÉÏ¡£
¡¡
TuplespacesÐèÒªÒ»¸ö·þÎñÆ÷´æ·Åtuples£¬ÔÚRubyÖÐÓÃdrb·þÎñÆ÷À´´æ·Åtuplespace¶ÔÏ󣬿ÉÒÔÓÃÏÂÃæ´úÂëʵÏÖ£º
require 'drb'
require 'tuplespace'
DRb.start_service("druby://server.host:12321", /
TupleSpace.new)
DRb.thread.join
Ê×ÏÈÔËÐзþÎñ¶Ë³ÌÐò£¬È»ºóÔËÐпͻ§¶Ë£¬²¢ÇÒÔÚ¿Í»§¶Ë³ÌÐòÖ¸¶¨ÄãÏëÓõÄÃû×Ö×÷Ϊ²ÎÊý¡£
Èç¹ûÄãÔËÐÐËüÄã»á·¢ÏÖ£¬Èç¹ûÄã²»ÔÚÏߣ¬·þÎñÆ÷¶Ë»á°Ñ¸øÄãµÄÏûÏ¢±£´æÔÚ·þÎñÆ÷ÉÏ¡£ÎÒÃǵÄÕâ¸öÓ¦ÓóÌÐò²»¶÷ÄǸöÈ¡´úYahoo IM£¬Jabber»òÕßIRCµÈ£¬µ«Õâ¶Î´úÂëÈ´·Ç³£ÓÐÓá£