1.rpyc/servers/classic_server.py
一个极其强大,极其通用,但是不安全的万能服务
2.rpyc/servers/registry_server.py
改变了连接模式 的服务
- registry-server类似于dns服务器,简化了对rpyc服务所在ip、端口的记忆。
- 在一个局域网中只需要一个此服务,一旦局域网中有一个主机运行了registry-server.py,那么我们就可以使用名字来连接服务。
域名解析工具,将一个域名过来就可以解析成了IP地址了!
通过名字就可以连接此服务了。
RPYC中提供了一些好的服务能够提供分布式计算服务,为此针对客户端提供了一些友好的封装。
提供的功能:
eval
execute
modules
通过使用c.root.eval或c.eval来访问了!
客户端访问:
c=rpyc.classic.connection("localhost") #连接
c.modules.os.system('ls')#用modules可访问任何服务端库
c.eval('1+23')#简单python语句执行
为分布式计算做辅助,提供了文件操作封装:import rpyc.utils.remoting- download(conn, remotepath, localpath, ignore_invalid=False)
- download_dir(conn, remotepath, localpath)
- download_file(conn, remotepath, localpath)
- update_module(conn, module)
- upload(conn, localpath, remotepath, ignore_invalid=False)
- upload_dir(conn, localpath, remotepath)
- upload_file(conn, localpath, remotepath)
- upload_package(conn, module, remotepath=None)
研究一下高级应用吧!
RPYC默认没有直接提供认证,需要自己处理,方案1:服务端提供:
def exposed_login(user,pass) 函数
def exposed_logout()函数
其他exposed函数中检查用户是否登录,没有登录则直接返回。
[想想这之前用RO方式 的时候就遇到了这种问题了。可以在服务器端写一个判断是否登录的方法从SQL中查询出来返回一个布尔值]
让客户端去调用的哦!如果不能登录就提示说登录失败了!
方案二:
ThreadedServer(authenticator=认证函数)
认证函数参数为(socket),该函数在accept返回后立即被调用,认证函数可立即从网络上读取一行验证信息,认证失败抛出AuthenticationError异常
客户端建立连接后,立即对c.fileno文件句柄写一行验证信息
系统默认提供了VdbAuthenticator验证器,如果使用,客户端需要用tls_connect来进行连接,系统必须安装
tlslite库
RPYC提供了两个服务:ThreadedServer
ForkingServer
服务可调用函数有:
start
register
unregister
close
代码中写得清楚哈哈!
s=ThreadedServer(MyService,port=12233,auto_register=False) #得到一个服务
s.start()#调用此服务中的函数
阅读(944) | 评论(0) | 转发(0) |