如何触发ZeroMQ的zmq.EVENT_HANDSHAKE_FAILED_PROTOCOL错误?
如何触发ZeroMQ的zmq.EVENT_HANDSHAKE_FAILED_PROTOCOL错误?
嘿,我刚好有过类似的测试需求,给你几个简单易操作的方法,能快速触发这个事件来验证你的回调逻辑:
方法一:用非ZeroMQ服务端对接ZeroMQ客户端
这是最容易实现的方式:- 先写个简单的普通TCP服务器(不用ZeroMQ),比如用Python标准库开个监听端口的服务,代码大概是这样:
import socket # 启动一个普通TCP服务器,监听本地5555端口 server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_socket.bind(("127.0.0.1", 5555)) server_socket.listen(1) print("普通TCP服务器已启动,等待连接...") conn, addr = server_socket.accept() conn.close()- 然后用你的ZeroMQ客户端去连接这个
tcp://127.0.0.1:5555端口。因为对方不是ZeroMQ服务,无法完成ZeroMQ的握手协议协商,客户端这边就会立刻触发zmq.EVENT_HANDSHAKE_FAILED_PROTOCOL事件。
方法二:强制使用不兼容的ZeroMQ协议版本
ZeroMQ不同版本的协议可能不兼容,你可以手动指定客户端和服务端使用不匹配的协议版本:- 服务端用默认的新版本协议(比如ZMQ 4.x)启动一个套接字,比如
zmq.REP绑定端口。 - 客户端在创建套接字后,强制设置一个老旧的协议版本,比如:
import zmq context = zmq.Context() client = context.socket(zmq.REQ) # 强制设置为ZMQ 3.x的协议版本,和服务端的4.x不兼容 client.setsockopt(zmq.PROTOCOL_VERSION, 3) client.connect("tcp://127.0.0.1:5555")这样客户端在尝试握手时,因为协议版本不匹配,就会触发目标事件。
- 服务端用默认的新版本协议(比如ZMQ 4.x)启动一个套接字,比如
这两种方法都能快速触发你要测试的事件,完全不用纠结复杂场景,足够验证你的回调逻辑啦。
备注:内容来源于stack exchange,提问作者jasonsf
相关产品推荐
相关产品推荐

