我正在使用 pygame 在 Python 中创建一个基于回合的策略游戏。我发现编写套接字非常困难,所以我求助于 Pyro 来分享游戏板的状态。但是,Pyro 似乎一次无法支持超过 2 个连接。
我正在通过 localhost 在 localhost 上运行名称服务器
python -m Pyro4.naming
测试用例“服务器”:
import Pyro4
class Testcase:
def __init__(self):
self.values = [1, 2, 3, 10, 20, 30]
def askvalue(self, i):
return self.values[i]
daemon = Pyro4.Daemon()
ns = Pyro4.locateNS()
uri = daemon.register(Testcase())
ns.register("thetest", uri)
daemon.requestLoop()
和客户:
import Pyro4, time
ns = Pyro4.locateNS()
casetester = Pyro4.Proxy("PYRONAME:thetest")
while True:
print "Accessing remote object:"
print casetester.askvalue(1)
print "staying busy"
time.sleep(10)
前两个客户端的输出:
/usr/local/lib/python2.7/dist-packages/Pyro4-4.14-py2.7.egg/Pyro4/core.py:155: UserWarning: HMAC_KEY not set, protocol data may not be secure
warnings.warn("HMAC_KEY not set, protocol data may not be secure")
Accessing remote object:
2
staying busy
Accessing remote object:
2
staying busy
并重复
第三个客户端的输出:
/usr/local/lib/python2.7/dist-packages/Pyro4-4.14-py2.7.egg/Pyro4/core.py:155: UserWarning: HMAC_KEY not set, protocol data may not be secure
warnings.warn("HMAC_KEY not set, protocol data may not be secure")
Accessing remote object:
并挂起。
来自第四个、第五个(可能还有更多)客户端的输出:
/usr/local/lib/python2.7/dist-packages/Pyro4-4.14-py2.7.egg/Pyro4/core.py:155: UserWarning: HMAC_KEY not set, protocol data may not be secure
warnings.warn("HMAC_KEY not set, protocol data may not be secure")
在这个阶段,我给名称服务器一个 ^C,客户端 3、4、... 给出这个输出并崩溃:
Traceback (most recent call last):
File "client.py", line 3, in <module>
ns = Pyro4.locateNS()
File "/usr/local/lib/python2.7/dist-packages/Pyro4-4.14-py2.7.egg/Pyro4/naming.py", line 323, in locateNS
raise Pyro4.errors.NamingError("Failed to locate the nameserver")
Pyro4.errors.NamingError: Failed to locate the nameserver
与此同时,客户 1 和 2 保持忙碌。
但是,中断其中一个活动客户端将使其中一个挂起的客户端开始运行。
我已经尝试通过“export PYRO_SERVERTYPE = multiplex”来切换线程,但这并没有改变行为。最大连接数的设置似乎是 200。将其设置为 1000 也没有解决我的问题。
我读过 Pyro 缺乏可扩展性,但我肯定能够获得至少 10 个连接吗?
如何一次将两个以上的客户端连接到 Pyro4 对象?