next up previous contents
Nächste Seite: 2 CORBA Benchmark Aufwärts: A. Programmbeispiele Vorherige Seite: A. Programmbeispiele   Inhalt

1 Sun-RPC Benchmark

Abbildung 30: XDR-Packer
class MyPacker(Packer):
  def pack_mydata(self, data):
    self.pack_int(data["a"]);
    self.pack_float(data["b"]);
    self.pack_string(data["c"]);
  def pack_mydatalist(self, data):
    self.pack_list(data, self.pack_mydata)

Abbildung 31: XDR-Unpacker
class MyUnpacker(Unpacker):
  def unpack_mydata(self):
    data = {}
    data["a"] = self.unpack_int();
    data["b"] = self.unpack_float();
    data["c"] = self.unpack_string();
    return data
  def unpack_mydatalist(self):
    return self.unpack_list(self.unpack_mydata)

Abbildung 32: Sun-RPC Server
class S(UDPServer):
  def handle_4(self):
    arg = self.unpacker.unpack_mydatalist()
    self.turn_around()
    self.packer.pack_mydatalist(arg)

s = S('', 0x20000000, 1, 0)
s.packer = MyPacker()
s.unpacker = MyUnpacker('')
s.register()
try:
  s.loop()
finally:
  s.unregister()

Abbildung 33: Sun-RPC Client
import sys, T
host = sys.argv[1]
class C(UDPClient):
  def call_4(self, arg):
    return self.make_call(4, arg, self.packer.pack_mydatalist, self.unpacker.unpack_mydatalist)

c = C(host, 0x20000000, 1)
c.packer = MyPacker()
c.unpacker = MyUnpacker('')
element = { "a": 47, "b": 23.5, "c": "hello world"}
data = []
for i in range (0,100):
  data.append(element)
T.TSTART()
for i in xrange(0,5000):
  c.call_4(data)
T.TSTOP()



Chris Huebsch 2001-12-11