0
この小さなテストスクリプトは私の問題を示しています。それは、メッセージを送信し、すべてのソケットを閉じて、ただ待って、終了することはありません。 ZMQ_LINGERを0に設定すると、キューに入れられたすべてのメッセージがすぐに破棄されるはずなので、なぜNode.jsプロセスを終了させることができないのですか?ソケットを閉じた後、ZeroMQがメッセージの待機をブロックしないようにするにはどうすればよいですか?
const zmq = require('zmq')
const bindUrl = 'tcp://127.0.0.1:4000'
let timer
let publisher = zmq.socket('pub')
publisher.monitor(500, 0)
publisher.setsockopt(zmq.ZMQ_LINGER, 0)
publisher.bind(bindUrl)
let subscriber = zmq.socket('sub')
subscriber.monitor(500, 0)
subscriber.setsockopt(zmq.ZMQ_LINGER, 0)
subscriber.connect(bindUrl)
subscriber.on('connect_error',() => {
console.log('connect error')
})
subscriber.on('connect',() => {
subscriber.subscribe('some topic')
})
publisher.on('bind', function() {
console.log('bound')
timer = setInterval(() => publisher.send(['some topic', 'blah']), 1000)
})
publisher.on('bind_error', function() {
console.log('bind error')
})
subscriber.on('disconnect', function() {
console.log('subscriber disconnected')
subscriber.close()
})
subscriber.on('close', function() {
console.log('subscriber closed')
subscriber.removeAllListeners()
subscriber = null
})
publisher.on('unbind', function() {
console.log('publisher unbound')
publisher.close()
})
publisher.on('close', function() {
console.log('publisher closed')
publisher.removeAllListeners()
publisher = null
subscriber.disconnect(bindUrl)
})
subscriber.on('message', function (topic, message) {
console.log(topic.toString(), message.toString())
clearInterval(timer)
subscriber.unsubscribe('some topic')
publisher.unbind(bindUrl)
})
出力は以下の通りである、プロセスが終了したことがありません。
[email protected]:~/$ node test-disconnect.js
bound
some topic blah
publisher unbound
publisher closed
subscriber disconnected
subscriber closed