Chinaunix首页 | 论坛 | 博客
  • 博客访问: 29423724
  • 博文数量: 2065
  • 博客积分: 10377
  • 博客等级: 上将
  • 技术积分: 21525
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-04 17:50
文章分类

全部博文(2065)

文章存档

2012年(2)

2011年(19)

2010年(1160)

2009年(969)

2008年(153)

分类: Python/Ruby

2009-01-16 13:14:09

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()#调用此服务中的函数







阅读(935) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~