python-Pyro4不允许两个以上的客户端访问一个URI
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python-Pyro4不允许两个以上的客户端访问一个URI,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2848字,纯文字阅读大概需要5分钟。
内容图文
![python-Pyro4不允许两个以上的客户端访问一个URI](/upload/InfoBanner/zyjiaocheng/657/e6e35a880f1c47d48bc121eadbe63866.jpg)
我正在使用pygame在Python中创建基于回合的策略游戏.我发现编写套接字非常困难,因此我选择了Pyro来共享游戏板的状态.但是,Pyro似乎无法一次支持两个以上的连接.
我正在通过本地主机上运行名称服务器
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保持忙碌状态.
但是,破坏其中一个活动的客户端将使其中一个挂断的客户端开始运行.
我尝试通过“导出PYRO_SERVERTYPE = Multiplex”从线程切换开,但这并没有改变行为.最大连接设置似乎是200.将其设置为1000也无法解决我的问题.
我读过Pyro缺乏可扩展性,但可以肯定我至少可以建立10个连接吗?
如何一次将两个以上的客户端连接到Pyro4对象?
解决方法:
回答我自己的问题,希望它会很快出现在Google上!
这不是一个“完美”的答案,但这是一个行之有效的方法.服务器代码保持不变,但客户端代码变为:
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全部内容,希望文章能够帮你解决python-Pyro4不允许两个以上的客户端访问一个URI所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。