#!/usr/bin/env python
#
# Notice: this client doesn't use the base testclient.py code
# because this one has to do special tests with creating proxies.
#
import Pyro.naming, Pyro.core
import Pyro.errors
from Pyro.protocol import getHostname
Pyro.core.initClient()
Pyro.config.PYRO_NS_DEFAULTGROUP=':test' # default namespace group
Pyro.config.PYRO_TRACELEVEL=3
Pyro.config.PYRO_LOGFILE='client_log'
print 'Check the logfile: client_log'
locator = Pyro.naming.NameServerLocator()
print 'Searching Naming Service...',
ns = locator.getNS()
print 'Naming Service found at',ns.URI.address,'('+(Pyro.protocol.getHostname(ns.URI.address) or '??')+') port',ns.URI.port
print 'binding to object'
try:
URI=ns.resolve('maxclients')
print 'URI:',URI
except Pyro.core.PyroError,x:
print 'Couldn\'t bind object, nameserver says:',x
raise SystemExit
print '---- trying to create a bunch of proxy objects'
objects=[]
for i in range(20):
ok=0
while not ok:
try:
print 'creating proxy object',i
obj=Pyro.core.getProxyForURI(URI)
# Pyro 1.2+ notice: the following method call
# actually binds the object. Just creating a proxy
# doesn't. You can create many, many proxies without
# a single connection to the server. Try commenting
# the setname call out and notice that all proxies
# are created successfully, and a crash occurs only
# later on. (line 66, where a method call is made and
# the object is connected).
obj.setname(i) # remote name
obj.__dict__['localname']=i # local (proxy) name
objects.append(obj)
ok=1
except Pyro.errors.ConnectionDeniedError,x:
# Server denied the new connection.
# A possible solution is to delete another one we don't need
# anymore and to try again.
print 'Error creating proxy object:',x
print ' -> removing old proxy and trying again...'
if objects:
del objects[0]
for obj in objects:
print 'object',id(obj),'is called remotely:',obj.getname(), 'and locally:',obj.__dict__['localname']
|