【问题标题】:How can I ensure ZeroMQ doesn't block waiting for messages after sockets are closed?如何确保 ZeroMQ 在套接字关闭后不会阻塞等待消息?
【发布时间】:2016-06-21 04:17:04
【问题描述】:

这个小测试脚本显示了我的问题。它将发送消息,关闭所有套接字,然后等待,永远不会退出。假设将 ZMQ_LINGER 设置为 0 应该使它立即丢弃所有排队的消息,那么为什么这不允许我的 Node.js 进程退出呢?

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)
})

输出如下,进程永远不会退出。

erin@titania:~/$ node test-disconnect.js 
bound
some topic blah
publisher unbound
publisher closed
subscriber disconnected
subscriber closed

【问题讨论】:

    标签: javascript node.js zeromq


    【解决方案1】:

    我明确监视套接字的事实是导致这种行为的原因。当我准备好退出进程时,我必须显式调用socket.unmonitor

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-20
      • 2011-05-19
      • 1970-01-01
      相关资源
      最近更新 更多