ZMQ的初步学习

2 篇文章 0 订阅
1 篇文章 0 订阅

ZMQ
ZMQ Community : http://zeromq.org/community
zguide:http://zguide.zeromq.org/page:all
pyzmq
pyzmq安装包:
https://pypi.python.org/pypi/pyzmq
pyzmq API: http://zeromq.github.io/pyzmq/
http://learning-0mq-with-pyzmq.readthedocs.org/en/latest/#

Server端

#! /usr/bin/env python
#coding=utf-8
import time
import zmq
from zmq.eventloop import ioloop,zmqstream

import json
import optionalSearch

import pymongo

import random
from threading import Thread
from Queue import Queue

"""
ioloop.install() must be called prior to instantiating *any* tornado objects,
and ideally before importing anything from tornado, just to be safe.
install() sets the singleton instance of tornado.ioloop.IOLoop with zmq's
IOLoop. If this is not done properly, multiple IOLoop instances may be
created, which will have the effect of some subset of handlers never being
called, because only one loop will be running.
"""

ioloop.install()

import tornado
import tornado.web

port = "5556"
queue = Queue(50)

conn = pymongo.Connection("localhost",27017)
db = conn.processMonitor
systemStatue = db.systemStatue

class Producer(Thread):
    def run(self,):
        global queue
        context = zmq.Context()
        socket = context.socket(zmq.REP)
        socket.bind("tcp://*:%s" % port)
        while True:
            msg = socket.recv()
            socket.send("from server:has recieved...")
            systemInfo = json.loads(msg)
            print type(systemInfo)
            queue.put(systemInfo)
            print "Produced..."
            time.sleep(random.random())

class Consumer(Thread):
    def run(self,):
        global queue,systemStatue
        while True:
            msg  = queue.get()
            queue.task_done()
            print "Consumed::",msg
            #存储客户机监控信息
            systemStatue.insert(msg)
            #搜素算法(最优二叉查找树)
            optionalSearch.monitorClientStatue(msg)
            time.sleep(random.random())

# def zmq_rep():
#   """用于接收数据"""
#   context = zmq.Context()
#   socket = context.socket(zmq.REP)
#   socket.bind("tcp://*:%s" % port)
#   while True:
#       msg = socket.recv()
#       print msg
#       socket.send("from server:has recieved...")

if __name__ == '__main__':
    #zmq_rep()
    # worker = threading.Thread(target=zmq_rep)
    # worker.start()
    Producer().start()
    Consumer().start()

客户端

#! /usr/bin/env python
#coding=utf-8
'''
version:1.0
监控windows信息:CPU占有率,内存占有率,端口开放情况,当前进程名称
数据格式:   [{'IP':getIp(),'CPUstate':getCPUState(),'Memorystate':getMemoryState(),
            'PortState':getPortState(),'ProcessName':getProcessName()},{},...]
'''
import time
import zmq
import psutil
import socket
import json
port = "5556"
server_addr = "192.168.116.133"
'''
获取被监控客户机的基本状态

'''
class MachineStatue:
    def _getHostName(self,):
        self._hostname = socket.getfqdn(socket.gethostname())
        return self._hostname

    def _getIP(self,):
        return socket.gethostbyname(self._hostname)

    def _getCPUState(self, interval=1):
        return psutil.cpu_percent(interval)

    def _getProcessInfo(self,):
        proc_pids = psutil.pids()
        proc_name = []
        for pid in proc_pids:
            proc = psutil.Process(pid)
            proc_name.append(proc.name())
        return zip(proc_pids,proc_name)

    def getInfo(self,):
        hostname = self._getHostName()
        ip = self._getIP()
        CPUState = self._getCPUState()
        processInfo = self._getProcessInfo()
        info = {'hostname':hostname,'ip':ip,'CPUState':CPUState,'processInfo':processInfo}
        return info
def main():
    print 'begin'
    machineStatue = MachineStatue()
    context = zmq.Context()
    req_socket = context.socket(zmq.REQ)
    print req_socket
    req_socket.connect("tcp://%s:%s"%(server_addr,port))
    while True:
        package = machineStatue.getInfo()
        req_socket.send(json.dumps(package))
        print "sending..."
        rev_info = req_socket.recv(copy=False)
        print rev_info
        time.sleep(5)
if __name__ == '__main__':
    main()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值