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

全部博文(2065)

文章存档

2012年(2)

2011年(19)

2010年(1160)

2009年(969)

2008年(153)

分类: Python/Ruby

2009-11-09 09:31:35

1.学习完这个之后要开始学习一下JAVA里面的RMI
RPYC重点
  • Client一定要close()连接
  • Serverexposed_头的函数才能被客户端访问到。
  • clientc.root.访问Server提供的功能
  • RPYC本身没有处理认证,任何客户端都能连接并访问暴露出的函数(认证权限)
  • 使用时时时考虑使用过程中网络断了怎么办?客户端程序出错退出了对服务端有什么影响?

1. 们对c.root.访问,底层都是rpyc进行了处理

2. 如果c.root.fun()的返回值不是数字和字符串,则是 rpyc.netref的封装nobj

3. 访问nobj时,他连接到服务端,取值,并返回给客户端

4. c.close()断开后,nobj无法从服务端获取数据了!



RPYC异步调用

异步调用则立即返回,并不等待函数调用结束!仅仅通知服务端,要求服务端在适当的时候调用函数。


异步调用基本使用过程:

  1. async_function_obj=rpyc.async(c.root.get_time) #联一个异步对象到目标函数
  2. result_obj=async_function() #通知服务端在适当的时候调用目标函数
  3. if result_obj.ready: #查询服务端是否已经完成了函数调用
  4. print result_obj.value #打印函数返回

  • 调函数:让服务端在完成目标函数调用后,调用一个客户端函数。此时客户端将自己的一个函数对象传递给服务端函数作为一个参数,服务端函数完成工作后调用此函数。
  • 事件通知:客户端如果不处理任何返回值,可以作为事件通知机制,通知服务端运行某函数。

(异步的工作交与服务端处理了。)


rpyc/servers/classic_server.py
rpyc/servers/registry_server.py
内置的两个工具这个就有点像Django的工具一样的!

  • registry-server类似于dns务器,简化了对rpyc务所在ip、端口的记忆。
  • 在一个局域网中只需要一个此服务,一旦局域网中有一个主机运行了registry-server.py,那么我们就可以使用名字来连接服务。
将IP与端口与域名进行了绑定处理。

RPYC带服务—classic_server.py
提供的功能:
  • eval
  • execute
  • modules
  • 使用:c.root.evalc.evalclassic_server特例)来访问
户端访问:
  • c=rpyc.classic.connect(localhost) #连接
  • c.modules.os.system(ls) #modules访问任何服务端库
  • c.eval(1+23) #简单python语句执行


认证:
(在编写RMI程序的时候就需要有一个认证的过程)
1

务端提供:

def exposed_login(user,pass) 函数

def exposed_logout()函数

其他exposed函数中检查用户是否登录,没有登录则直接返回。


RPYC提供了两个服务:

ThreadedServer

ForkingServer


务可调用函数有:

start

register

unregister

close

fileno












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