gpt4 book ai didi

python - Pyro4 不允许两个以上的客户端访问同一个 URI

转载 作者:行者123 更新时间:2023-11-28 16:47:29 30 4
gpt4 key购买 nike

我正在使用 pygame 在 Python 中创建一个回合制策略游戏。我发现编写套接字非常困难,所以我转向 Pyro 来分享游戏板的状态。然而,Pyro 似乎无法一次支持超过 2 个连接。

我在本地主机上运行一个域名服务器

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 对象?

最佳答案

回答我自己的问题,希望这会迅速出现在谷歌上!

这不是一个“完美”的答案,但它是一个可行的解决方案。服务器代码保持不变,但客户端代码变为:

import Pyro4, time


global ns
global casetester

def connect():
global ns
global casetester
ns = Pyro4.locateNS()
casetester = Pyro4.Proxy("PYRONAME:thetest")

def disconnect():
global ns
global casetester
del ns
del casetester


while True:
print "Accessing remote object:"
connect()
print casetester.askvalue(1)
disconnect()
print "staying busy"
time.sleep(3)

到处都是额外的“全局”,因为从不假设。

为什么会这样?因为我建立连接,访问远程对象,然后删除连接。

我发现这个解决方案非常丑陋,但我会一直使用它直到找到“正确”的方式。

关于python - Pyro4 不允许两个以上的客户端访问同一个 URI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12340565/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com