システム
Rinda を介して、分散強調するシステムにする。
各部がシンプルになって良いんじゃないかと思って。
とりあえず、クライアントとのソケットを保持する部分を作った。
require 'rinda/tuplespace' require 'json' tuple_space = Rinda::TupleSpace.new t = Thread.fork do DRb.start_service( "druby://localhost:45678", tuple_space ) puts DRb.uri DRb.thread.join end tcp_server = TCPServer.new( port = 12345 ) loop do Thread.fork( tcp_server.accept ) do |sock| me = sock.gets.chomp # relay (send part) Thread.fork do loop do type, target, param = tuple_space.take( [ nil, me, Hash ] ) param[ "type" ] = type sock.puts param.to_json end end # recieve part while line = sock.gets begin type, target, param = JSON.parse( line ) param[ 'from' ] = me tuple_space.write( [ type, target, param ], 120 ) rescue => e warn "wrong format, #{e.message}" end end warn "#{me} disconnected" end end
めっちゃシンプル。