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)
有人能看到一种方法来消除这种可怕的软糖吗?
答案 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');
});
就像这样,你必须改变你的代码。