1

NodeJS v.0.10.X 不向后兼容 v0.8.X 的多播。

bind似乎已经从同步变为异步。

我目前正在用一个可怕的软糖解决这个问题:

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

我使用 API 的方式是否有错误,或者这里的向后兼容性是否存在问题?

如果我将 v0.10.X 代码与 NodeJS v0.8.XI 一起使用,则不会收到任何消息(我假设此处对“绑定”的调用是同步的,并且不调用提供的函数。

如果我将 v0.8.X 代码与 NodeJS v0.10.XI 一起使用,则会出现错误:

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)

任何人都可以找到去除这种可怕软糖的方法吗?

4

1 回答 1

0

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

重要提示: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');
});

它将是这样的,因此您必须更改代码。

于 2013-05-10T14:42:36.613 回答