小巴IPC库

minibus的Python项目详细描述


#minibus是一个进程间通信库,用于使用面向服务的体系结构设计构建复杂软件的快速原型。
类似的功能可以在[ICE](www.zeroc.com/ice.html)、[LCM](https://lcm proj.github.io/)和[ROS](www.ros.org)等工具中找到。
微型总线经过优化,具有高度灵活的协议ting projects

minibus目前仅在python中可用,但是它的简单设计应该允许它轻松地移植到其他语言中。

t可以通过传递消息(甚至在不同的机器之间)相互通信。
这些消息通过名为*topics*
的命名频道广播,当一个客户端*发布(发送)一个主题上的消息时,任何其他客户端*订阅(侦听)该主题将接收该消息。
这称为发布/订阅模型,其中的信息必须在从发送者到接收者。

minibus还定义了一个称为*服务*的远程过程调用(rpc)接口,允许名为*服务客户端*的minibus客户端调用名为*服务服务器*的其他minibus客户端上运行的函数*
*服务服务器*公布其功能通过为它们分配名称,*服务客户端*可以使用这些名称将本地函数映射到远程函数。
这称为请求/应答模型,其中来自服务器的信息由客户端进行轮询。
*服务*使用*主题*实现

同一名称的ic。


消息架构(类型)
任何可以序列化为json的数据结构都可以通过微型总线发送。
微型总线主题没有与之关联的任何特定消息类型。
相反,作为发布者或订阅者连接到主题的每个客户端都可以指定它们期望消息所处的消息架构(或数据格式)。
消息架构以json架构的形式存在,并且可以根据您的需要,尽可能通用或特定。
例如,模式`{}`将接受所有消息,而模式`{"type":"string"}`只接受字符串。
有关编写模式的详细信息,请查看[json schema.org](www.json-schema.org)。

/>主题名称是使用名称空间格式化的。
名称空间类似于unix文件系统目录。
所有主题必须以正斜杠"`/`"开头,后跟某些名称。
这些名称将构成*根名称空间*
添加附加的正斜杠`/``将添加子名称空间。


名称空间纯粹用于组织目的,在微型总线中没有任何其他特殊功能。
但是,*订阅者*可以使用正则表达式列出同时处理多个主题,名称空间使利用此功能变得容易。

某些主题名称可能具有特殊含义。
例如,"mbtt"工具不显示以双下划线开头和结尾的名称(例如"隐藏"主题)。
此约定不向其他客户端隐藏主题,而主要用于屏蔽小型客车系统的内部组件。

服务使用与主题相同的命名约定和消息架构概念,并使用主题命名空间。
服务由一个名称和两个架构指定-一个定义传递给服务的参数(参数),一个定义返回值。
服务请求直接绑定到回复消息,因此当多个客户端连接时ed到单个*服务服务器*只有呼叫客户端将收到相应的回复消息。


已创建。
一个主题(`````请求```)用于*调用*服务并发送要用于执行的参数。
如果服务正常完成执行并返回一个值,则会将其传递回````回复``主题上的调用客户端。
否则,如果发生异常s执行服务时,错误消息将返回到"错误"主题上的调用客户端。
此实现由客户端接口抽象。

python api

minibusclientapi当前有两个python实现-一个线程套接字version和一个扭曲的版本。

````
类minibusclientapi(对象):
"定义与minibus交互的公共api。"
def初始化(self,name,cryptokey=none):

def publisher(self,topic-name,data-format):

def subscribe(self,name-pattern,data_format,callback,headers=false:

def unsubscribe(self,name_pattern,callback):


"返回"一种类似于本地函数的函数。
retval=proxyfunc(params)
"


def service-func服务器(self、name、reqst-schema、reply-schema、func):
"提供链接到本地函数的命名网络服务。
my-func(params…
客户端接收函数返回的值。
这是一个方便的函数,它将service_server()的功能包装在返回要发送回客户端的值的单个函数周围。
"


def service_server(self,name,reqst_schema,reply_schema,func:
""提供命名的网络服务。服务工作由
func参数接收,包括srvid值和接收的参数。
srvid值用于标识客户的"工单"信息
,必须传递给两个应答函数之一。
服务将值返回给当值传递给
service_server_return()或service_server_error()时的客户端。
"


def service_server_return(self,srvid,value):
""服务服务器用来向服务客户端发送返回值"


def service_server_错误(self,srvid,value):
"服务服务器用来向服务客户端发送错误值"
````

```总线协议
使用多播udp、tcp和ipc的组合。


头*是一个json对象,由主题名作为字符串组成。
数据*字段包含一个字符串,其中消息是序列化的json对象。

:用于加密)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
hibernate java JPA使用限制api调用sql函数   java使用哈希代码确定对象等价性   java通过蓝牙在安卓应用程序和pc应用程序之间发送敏感数据   mysql查询在java上不提供小数,但在数据库上提供小数   java链接的JAR在IntelliJ中运行良好,但在命令行中却不行   mkstemp的java等价物   java SINGLE_INTERVAL_SELECTION未按预期工作   使用Java流的lambda并行循环?   java如何增加按键上的数字值?   java karaf单个依赖项错误   具有共享主键的java JPA单向@OneToOne关系始终会触发辅助查询,即使fetchType是急切的   java为什么选择。select()总是返回0   java无法确定NullPointerException中哪个变量为null   字符串Java谜题的原因是什么?