python zmq操作

该博客介绍了如何将Python的ZeroMQ操作封装成一个类,便于在客户端和服务端直接调用。类包括连接、断开、读写及JSON数据的处理方法。客户端展示了周期性和单次发送数据的实现,而服务器端则演示了定时发送数据到客户端,并接收处理返回结果的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

将python的zmq操作直接封装成一个类,要用的时候直接使用即可

#!/usr/bin/python
# coding=utf-8

import zmq
import time


class zmqoperate:

    def __init__(self, ip, port) -> None:
        self.__ipport =  "tcp://" + ip + ":" + port
        self.__context = zmq.Context()
        self.__sock = self.__context.socket(zmq.PAIR)
        # self.__sock = self.__context.socket(zmq.REP)
  
    def myzmqbind(self) -> None:
        self.__sock.bind(self.__ipport)
        
    def myzmqclose(self) -> None:
        self.__sock.disconnect(self.__ipport)
        self.__sock.close()

    def myzmqconnect(self) -> None:
        print("connect to server...... <", self.__ipport, ">")
        self.__sock.connect(self.__ipport)

    def myzmqread(self):
        return self.__sock.recv()

    def myzmqwrite(self, data) -> None:
        self.__sock.send(data)

    def myzmqreadjson(self):
        return self.__sock.recv_json()

    def myzmqwritejson(self, data) -> None:
        self.__sock.send_json(data)

client端的使用:

import threading
from zmq import *
from zmqoperate import zmqoperate

sock = zmqoperate("127.0.0.1", "5555")
sock.myzmqconnect()

# 周期发送
def periodsend(mydict):
    global sock
    # sock.myzmqwritejson(json.dumps(mydict))
    sock.myzmqwrite(mydict)
    print("periodsend send thread")

# 单次发送
def singlesend(mydict):
    global sock
    # sock.myzmqwritejson(json.dumps(mydict))
    sock.myzmqwrite(mydict) 
    print("single send")

# 起的定时器来进行周期发送
def startimer(proto_period, mydict):
    periodsend(mydict)
    threading.Timer(proto_period, startimer, (proto_period, mydict,)).start()

server端的使用:

import threading
from simu.zmqoperate import zmqoperate

i = 1

def sendtoclient():
    global i
    mydictlist = [0x9f, 0x2, 0x5, 0x7d, 0x30, 0x1, 0x0, i, 0x7b, 0x1f, 0x9f, 0x3]
    sock.myzmqwrite(bytes(mydictlist))
    i += 1

def startimer(proto_period):
    sendtoclient()
    threading.Timer(proto_period, startimer, (proto_period,)).start()    

if "__main__" == __name__:

    sock = zmqoperate("*", "5555")
    sock.myzmqbind()

    period = 3
    startimer(period)

    while True:
        # message = sock.myzmqreadjson()
        message = sock.myzmqread()
        print(list(message))

        payload = []
        ucom = ucomcoder()
        ucom.decode(list(message), payload)
        print (payload)

结果就不展示了,只是作为自己记录代码所用,防止时间长了忘记!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值