在RPyC中传递函数参数
我想把很多逻辑封装成一个Python函数,然后把这个函数当作参数传给远程的RPyC方法,希望在服务器上执行这个函数。但是RPyC把这个函数当作回调函数,在本地执行。有没有办法解决这个问题?我能不能强制服务器在服务器上执行这个函数,而不是在客户端执行?
谢谢。
2 个回答
RPyC可以传输一些基本的数据类型,比如int(整数)、long(长整数)、bool(布尔值)、str(字符串)、float(浮点数)、unicode(Unicode字符)、bytes(字节)、slice(切片)、complex(复数)、tuple(元组,包含简单类型)、forzenset(不可变集合,包含简单类型)
,还有一些特殊的值,比如None(空值)、NotImplemented(未实现)和Ellipsis(省略号)
不过要注意,如果这样做的话,我就可以在你的服务器上执行一些像os.unlink(sys.argv[0])
这样的命令,或者其他你可能不想让它执行的东西。换句话说,允许服务器运行任意代码是一个巨大的安全隐患。
如果你是在服务器与服务器之间的情况下,这样做是可以的,但我觉得你可能并不需要这样,除非你完全信任双方。但如果是客户端与服务器的应用,那就不行了。
如果你决定这样做,使用eval可能不是一个好的选择,因为这会让你的服务器暴露得太多。你需要探索一些方法来限制可能性,根据你想让你的bunch of logic
做什么,搜索一下“python eval security”,你会发现一些有趣的讨论。
teleport_function这个功能让我可以把客户端的函数传送到服务器上。
http://rpyc.readthedocs.org/en/latest/api/utils_classic.html#rpyc.utils.classic.teleport_function