NodeJS v.0.10.X与v0.8.X不向后兼容以进行多播

时间:2013-05-10 14:11:28

标签: node.js bind multicast multicastsocket

NodeJS v.0.10.X与v0.8.X不向后兼容以进行多播。

bind似乎已从同步更改为异步。

我目前正以一种可怕的软糖来解决这个问题:

https://github.com/chrisdew/multicast-eventemitter/blob/master/lib/multicast-eventemitter.js#L87

我使用API​​的方式是错误的,还是在这里打破了向后兼容性?

如果我使用带有NodeJS v0.8.XI的v0.10.X代码,则不会收到任何消息(我假设调用'bind'在这里是同步的,并且不调用提供的函数。

如果我在NodeJS v0.10.X中使用v0.8.X代码,则会收到错误消息:

dgram.js:354
    throw errnoException(process._errno, 'setMulticastTTL');
          ^
Error: setMulticastTTL EBADF
    at errnoException (dgram.js:439:11)
    at Socket.setMulticastTTL (dgram.js:354:11)
    at MulticastEventEmitter.addListener (/home/chris/Dropbox/multicast-eventemitter/lib/multicast-eventemitter.js:96:14)
    at Object.<anonymous> (/home/chris/Dropbox/multicast-eventemitter/examples/loopback.js:17:9)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)
    at startup (node.js:119:16)

有人能看到一种方法来消除这种可怕的软糖吗?

1 个答案:

答案 0 :(得分:0)

是的,它不再是同步的。您也可以查看docs

  

重要提示:dgram.Socket#bind()的行为已更改   v0.10并且现在总是异步。

如果您的代码如下所示:

var s = dgram.createSocket('udp4');
s.bind(1234);
s.addMembership('224.0.0.114');

您必须将其更改为:

var s = dgram.createSocket('udp4');
s.bind(1234, function() {
  s.addMembership('224.0.0.114');
});

就像这样,你必须改变你的代码。

相关问题