2013-05-10 51 views
1

NodeJS v.0.10.X不能向後兼容v0.8.X的多播。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沒有收到任何消息(我假設'bind'的調用在這裏是同步的,並且沒有調用提供的函數。

如果我用的NodeJS v0.10.XI的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

我也提交了這個bug:https://github.com/joyent/node/issues/5446 – fadedbee 2013-05-10 14:12:01

回答

0

是的,這是沒有更長的同步,你也可以查看docs

Important note: the behavior of dgram.Socket#bind() has changed in v0.10 and is always asynchronous now.

如果你有一些代碼看起來是這樣的:

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

它會是這樣的,所以你就必須改變你的代碼。

+0

我改變了我的代碼。我不喜歡的是在我的代碼中有一個可怕的版本號檢查條件。我試圖找到解決方案。 – fadedbee 2013-05-13 07:43:22

+0

我不認爲你在這裏有一個選項。做版本檢查/取決於非主要版本確實是一個壞主意。按照文檔它現在總是異步的,所以你必須使用新的API。 – user568109 2013-05-13 14:51:45