我用两个模块编写了一个应用程序。
代理:收集有关计算机资源的信息并发送给Manager。
经理:从客户端收听数据并写入数据库。
我已完成Agent上的收集数据功能。我为每种信息编写函数。 Exp : OS() for Operating System information, DISK() for Disk used information
....
每个函数返回一个包含信息的列表。我想将这些列表发送给Manager。但是当向Manager发送数据时我必须将数据类型更改为字符串。
我想我应该逐个发送每个列表,以便我将数据类型更改回列表。我计划在Agent和Manager上编写for循环来发送/接收数据。
代理人:
resource_info = [OS(), CPU(), DISK(), MEMORY(), NETWORK(), FIREWALL()]
try:
for x in resource_info:
s.sendall(str(x))
except socket.error, e:
print "Error sending data: %s" % e
sys.exit(1)
# Close Socket
s.close()
经理:
s.listen(10)
for x in range(0,4):
if x == 0 :
conn, addr = s.accept()
OS = conn.recv(100000)
if x == 1 :
conn, addr = s.accept()
DISK = conn.recv(100000)
if x == 2 :
conn, addr = s.accept()
MEMORY = conn.recv(100000)
....
OS = OS.split(",")
DISK = DISK.split(",")
....
但我认为这是一种愚蠢的方式。请给我一些关于如何在Agent上发送多列表的建议。如果你有简单的代码,那就太好了。 非常感谢, 广
答案 0 :(得分:1)
我建议您创建一个sudo snap switch node --edge
,将每个资源映射到相应的信息,而不是创建dict
。
list
将此数据发送到套接字的更简洁方法是使用pickle。 使用pickle,您可以序列化Python对象。
resource_info = {
'OS': [...],
'DISK': [...]
}
在管理器上,您可以接受字节并使用import pickle
data = pickle.dumps({'foo': 'bar'})
对其进行反序列化。
pickle.loads(...)
您可以查看this答案,了解示例实施情况。
我还建议阅读this blogpost以了解套接字是字节流,而不是消息流。