IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 对SOA的浅探索——基于python的XML-RPC实现 -> 正文阅读

[网络协议]对SOA的浅探索——基于python的XML-RPC实现

前言

????????近期项目都是和SOA相关的内容,笔者刚接手这个项目的时候也挺懵圈的。就对这个SOA框架进行了一番探索。

SOA(面向服务架构)_百度百科面向服务架构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)进行拆分,并通过这些服务之间定义良好的接口和协议联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种各样的系统中的服务可以以一种统一和通用的方式进行交互。https://baike.baidu.com/item/SOA/2140650? ? ? ? SOA就是面向服务架构,是个啥意思呢,通俗的来说就是函数功能接口化,客户端可以调用接口得到相应的功能。这么说可能还是有点抽象。举个例子:一个板子能控制IO口的高地电平,我发个{"id":1,"s":0}数据给这个板子,就能将引脚1设置为低电平。这个数据解析并实现引脚控制这样的功能就是板子对于我所开放出来的功能。我发送这样的数据格式,就是我对这个功能服务的调用方式,也就是通讯协议。对于SOA也一样,它也有自己的一套类似的通讯协议。

? ? ? ? SOA作为服务架构,有诸多实现方法,例如SOAP、XML-RPC、DDS等等。


进一步探索

库准备

? ? ? ? 单纯从概念上,作为程序员估计得不到直观的体验。这里,我选取了XML-RPC作为探索方向。因为SOAP库没安装成功,DDS库结构繁琐,对于上手及其不友好。XML-RPC其实python有自带库,所以不用自行安装。

代码准备? ? ? ??

? ? ? ? 为了更方便的体现服务的可增减效果,我专门用一个.py文件来存放服务内容:

# servelist.py::

__all__ = ['ground_server_add', 'ground_server_sub']

def ground_server_add(a,b):
    print(a+b)
    return a+b

def ground_server_sub(a,b):
    print(a-b)
    return a-b

这里呢,我实现了两个服务,一个是加法,一个是减法。运行过程中会进行print打印结果。

再来写个服务端

# server.py::
from xmlrpc.server import SimpleXMLRPCServer
from servelist import *

server = SimpleXMLRPCServer(("localhost", 8123))    # 服务端口localhost:8123

# 对servelist.py中的文件进行服务注册
d = dict(globals())    # 获取全局的变量或者函数
for key in d:          # 遍历这些变量或者函数
    if 'ground_server_' in key:    # 寻找以ground_server_开头的变量或者函数
        server.register_function(d[key])  # 进行注册
        print(key)    # 打印被注册的函数

print()
print()
server.serve_forever()    # 保存心跳

再来写个客户端

# client.py::
import xmlrpc.client

server=xmlrpc.client.ServerProxy("http://localhost:8123")    # 设置访问接口
print(server.ground_server_add(1,2))    # 服务调用并打印结果,加法
print(server.ground_server_sub(1,2))    # 服务调用并打印结果,减法

运行效果展示

先运行服务端:

可以看到,打印出了被注册的服务。

再运行客户端:

?顺利的打出了运行结果。

再看看服务端是否有啥变化呢:

?也打出了运行结果,因为我们在服务功能中做了结果打印的。如果我们把其中一个方法做一下改进:

# servelist.py::

__all__ = ['ground_server_add', 'ground_server_sub']

def ground_server_add(a,b):
    # print(a+b)
    return a+b

def ground_server_sub(a,b):
    print(a-b)
    return a-b

将加法的打印注释掉,重新运行服务端和客户端,可以看到客户端也不会再打印加法的结果:

?由此可见,服务的运行实际上也就是在服务端上运行。因此,调用服务,可以理解为给服务端发送操作指令。


简评

????????服务动态化是SOA架构的一大特色,在这个框架下,能够注册各种各样的服务,说白了就是开放各种各样的功能,客户端需要什么功能就调用什么功能,实现模块黑箱化,也促进了模块化开放的理念。

? ? ? ? 把这框架技术放到Jetson Nano上又会碰撞出怎样的火花呢!


相关代码已打包上传,免积分:

基于python的xmlrpc示例-Python文档类资源-CSDN下载基于python的xmlrpc示例,详细说明见https://blog.csdn.net/qq_25更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/qq_25662827/83322373

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-03-06 13:32:18  更:2022-03-06 13:33:10 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年10日历 -2024/10/5 13:27:08-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码