python学习之socket二


                1.rpyc/servers/classic_server.py
一个极其强大,极其通用,但是不安全的万能服务
2.rpyc/servers/registry_server.py
改变了连接模式 的服务
[color="#000000"]registry-server[color="#000000"]类似于[color="#000000"]dns[color="#000000"]服[color="#000000"]务器,简化了对[color="#000000"]rpyc[color="#000000"]服[color="#000000"]务所在[color="#000000"]ip[color="#000000"]、端口的[color="#000000"]记忆。[color="#000000"]在一个局域网中只需要一个此服[color="#000000"]务,一旦局域网中有一个主机运行了[color="#000000"]registry-server.py[color="#000000"],那么我[color="#000000"]们就可以使用名字来连接服务。域名解析工具,将一个域名过来就可以解析成了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语句执行
[color="#000000"]为分布式计算做辅助,提供了文件操作封装:[color="#000000"]import rpyc.utils.remoting[color="#464653"]download(conn, remotepath, localpath, ignore_invalid=False)[color="#464653"]download_dir(conn, remotepath, localpath)[color="#464653"]download_file(conn, remotepath, localpath)[color="#464653"]update_module(conn, module)[color="#464653"]upload(conn, localpath, remotepath, ignore_invalid=False)[color="#464653"]upload_dir(conn, localpath, remotepath)[color="#464653"]upload_file(conn, localpath, remotepath)[color="#464653"]upload_package(conn, module, remotepath=None)
研究一下高级应用吧!
[color="#000000"]RPYC[color="#000000"]默[color="#000000"]认没有直接提供认证,需要自己处理,方案[color="#000000"]1[color="#000000"]:[color="#000000"]服[color="#000000"]务端提供:
[color="#000000"]def exposed_login(user,pass) [color="#000000"]函数
[color="#000000"]def exposed_logout()[color="#000000"]函数
[color="#000000"]其他[color="#000000"]exposed[color="#000000"]函数中[color="#000000"]检查用户是否登录,没有登录则直接返回。
[color="#000000"][想想这之前用RO方式 的时候就遇到了这种问题了。可以在服务器端写一个判断是否登录的方法从SQL中查询出来返回一个布尔值]
[color="#000000"]让客户端去调用的哦!如果不能登录就提示说登录失败了!
[color="#000000"]方案二:

[color="#000000"]ThreadedServer(authenticator=[color="#000000"]认证函数)
[color="#000000"]认证函数参数为[color="#000000"](socket)[color="#000000"],[color="#000000"]该函数在[color="#000000"]accept[color="#000000"]返回后立即被[color="#000000"]调用,认证函数可立即从网络上读取一行验证信息,认证失败抛出[color="#000000"]AuthenticationError[color="#000000"]异常
[color="#000000"]客[color="#000000"]户端建立连接后,立即对[color="#000000"]c.fileno[color="#000000"]文件句柄写一行[color="#000000"]验证信息
[color="#000000"]
[color="#000000"]系[color="#000000"]统默认提供了[color="#000000"]VdbAuthenticator[color="#000000"]验证器,如果使用,客户端需要用[color="#000000"]tls_connect[color="#000000"]来[color="#000000"]进行连接,系统必须安装
[color="#000000"]tlslite[color="#000000"]库
[color="#000000"]

[color="#000000"]RPYC[color="#000000"]提供了两个服[color="#000000"]务:[color="#000000"]ThreadedServer
[color="#000000"]ForkingServer
[color="#000000"]
[color="#000000"]服[color="#000000"]务可调用函数有:
[color="#000000"]start
[color="#000000"]register
[color="#000000"]unregister
[color="#000000"]close
[color="#000000"]代码中写得清楚哈哈!
s=ThreadedServer(MyService,port=12233,auto_register=False) #得到一个服务
s.start()#调用此服务中的函数
[color="#000000"]