python网关

fjagep的Python项目详细描述


简介

这个python包提供了一个与fj_ge代理交互的Gateway类。fj_ge代理驻留在一个或多个提供代理管理、目录和消息传递服务的容器中。不同的容器可以在同一个节点上运行,也可以在网络中的不同节点上运行。pythonGateway类允许外部python脚本使用python实现的接口与fj_ge代理交互。pythonapi使用包fjagepy

第一步是使用:

安装fjagepy
pip install fjagepy

fjagepy包中导入所有必需的符号:

from fjagepy import Gateway, AgentID, Message, MessageClass, GenericMessage, Performative

或者只是:

from fjagepy import *

导入消息类

由于java/groovy消息类在python中不直接可用,因此我们使用MessageClass实用程序动态创建指定的消息类。例如:

ShellExecReq = MessageClass('org.arl.fjage.shell.ShellExecReq')

ShellExecReq类现在可以用于实例化新对象,如:

msg = ShellExecReq()

作为字符串的完全限定类名必须作为此方法的参数提供。fj_ge已经支持的完全限定类名是文档化的here

打开连接

如果fjage服务器正在运行,我们可以使用Gateway类创建连接:

gw = Gateway(hostname, port)

其中hostnameport是运行fj_ge服务器的设备的IP地址和端口号。创建gw对象,该对象可用于调用Gateway类的方法。

发送和接收消息

我们在前面已经看到,代理之间使用消息进行交互。python网关同样可以向运行在不同机器上的容器上的代理发送和接收消息。请求和响应消息的示例如下所示:

请求消息:

msg = Message()
msg.recipient = 'abc'
gw.send(msg)

其中'abc'是您尝试将消息发送到的代理的名称。

另一种发送消息的方法如下:

msg = Message(recipient = 'abc')
rsp = gw.request(msg, timeout)

在上面的代码片段中,使用请求方法发送消息并接收响应。可以接收的不同响应被记录为here

msgMessage类的实例,在ablove示例中,指定的收件人被设置为名为“abc”的代理。构造的消息msg可以使用gw.send(msg)发送到主容器上运行的代理。

从使用网关类打开的远程连接执行shell命令的简单示例如下所示:

gw = Gateway(hostname, port)
ShellExecReq = MessageClass('org.arl.fjage.shell.ShellExecReq')
shell = gw.agentForService('org.arl.fjage.shell.Services.SHELL')
req = ShellExecReq(recipient=shell, cmd = 'ps')
rsp = gw.request(req, 1000)
print(rsp)
gw.close()

在上面的代码中,我们首先打开到fj_ge服务器的连接。接下来,我们导入稍后需要的ShellExecReq消息。我们希望将此消息发送到支持SHELL服务的代理(接受ShellExecReq消息)。Gateway类的agentForService方法允许我们查找该代理。接下来,我们构造ShellExecReq消息来请求执行shell命令(在本例中为ps)。然后,request方法发送消息并等待响应,然后打印并关闭连接。

一般消息

由于前面已经解释了GenericMessage的用例,我们将使用python网关api来说明它的使用:

gw = Gateway(hostname, port)
shell = gw.agentForService('org.arl.fjage.shell.Services.SHELL')
gmsg = GenericMessage(recipient=shell, text='hello', data=np.random.randint(0,9,(100)))
gw.send(gmsg)

在服务器端运行的shell代理将接收通过网关发送的一般消息:

rgmsg = receive(GenericMessage, 1000)
println rgmsg.text
println rgmsg.data

发布并订阅

我们知道有时我们可能希望在不明确知道收件人是谁的情况下发布邮件。订阅我们发布的主题的所有代理都将收到已发布的消息。例如:

gw.topic('abc')

返回表示命名主题的对象。用户可以使用:

gw.subscribe(gw.topic('abc'))

但如果我们有兴趣接收从某个特定代理发送的所有消息,而该代理的AgentID我们知道(例如shell),然后:

shell = gw.agentForService('org.arl.fjage.shell.Services.SHELL')
gw.subscribe(shell)

将允许shell代理接收已发布的消息。

关闭连接:

为了关闭到fj_ge服务器的连接,我们可以调用由Gateway类提供的close方法:

gw.close()

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

推荐PyPI第三方库


热门话题
Java泛型和基类   ProcessBuilder或DefaultExecutor启动的“RunAs”子进程的java读取标准输出   java应用程序在尝试登录时突然停止   Java:神秘的Java未捕获异常处理程序[带代码]   java JavaFX NumberAxis自动范围无限循环   最新版本和旧版本冲突的java双Maven依赖关系   java如何导入带有部署变量类名的静态函数?   编译器构造不同的JDK更新会产生不同的Java字节码吗?   java无法在struts 1.1中上载任何超过250 MB大小的文件   java调整jcombobox下拉菜单的宽度   java如何在某些情况下忽略@SQLDelete注释   在Eclipse for Java EE developers edition中禁用HTML警告   java HttpUrlConnection重置请求属性   java@Provider资源未在rest应用程序中注册   java TOP N使用JPA连接   java在使用反射调用方法时区分int和Integer参数