如何使用已closures的ZeroMQ套接字来终止进程?

我正在使用ZeroMQ进行发布订阅。 这是一个简化的代码:

import zmq from 'zeromq'; import d from 'debug'; const debug = d('publisher'); let port = '8000'; let subject = 'FLIGHTS'; const socket = zmq.socket('pub'); socket.on('close', function(...toto) { debug('connection closed'); }); socket.on('close_error', function(...toto) { debug('error while closing connexion'); }); socket.monitor(10, 0); socket.bindSync('tcp://*:' + port); export function send(message: object) { const jsonMessage = JSON.stringify(message); socket.send([subject, jsonMessage]); } export function close() { socket.close(); } setTimeout( () => close(), 3000 ); 

我遇到的问题是,即使套接字在3秒后closures,进程也不会退出。 我不能使用process.exit因为我正在做的模块被用于很多的笑话testing。
我在ZeroMQ文档中找不到任何东西。

给定默认的ZeroMQ API规范,任何尝试.close()套接字实例都会阻塞,直到一定的时间到期。

典型的优雅的终止顺序依赖于在其创build时预先设置该实例属性的实践:

 socket.setsockopt( zmq.LINGER, 0 ); // A SYSTEMATIC STEP UPON CREATION 

ZMQ_LINGER :设置套接字closures的ZMQ_LINGER时间

ZMQ_LINGER选项应该为指定的套接字设置ZMQ_LINGER时间。 持续时间决定了在一个套接字与zmq_disconnect()断开连接或用zmq_close()closures之后,尚未发送给对等体的待处理消息将在内存中逗留zmq_close() ,并进一步影响套接字上下文与zmq_ctx_term()的终止。 。 以下概述了不同的行为:

– 值-1指定了无限的逗留期间。 在调用zmq_disconnect()zmq_close()之后,不得抛弃挂起的消息。 试图用zmq_ctx_term()终止套接字的上下文应该阻塞,直到所有待处理的消息已经被发​​送给对等体。

– 值0指定了不存在的时间段。 在调用zmq_disconnect()zmq_close()之后,应立即丢弃挂起的消息。

– 正值指定延迟周期的上限(以毫秒为单位)。 在调用zmq_disconnect()zmq_close()之后,不得抛弃挂起的消息。 试图用zmq_ctx_term()终止套接字的上下文应该阻塞,直到所有等待消息已经被发​​送到对等体,或者等待时间到期,之后任何未决的消息将被丢弃。

默认值〜30000 [ms](适用于所有套接字types)

有关详细信息,请阅读ZeroMQ API文档。