Skip to content

Instantly share code, notes, and snippets.

@ralphtheninja
Created March 6, 2013 07:55
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save ralphtheninja/5097511 to your computer and use it in GitHub Desktop.
mux-demux and dnode, my brain is boiling and can't see why it's not working
var dnode = require('dnode')
var MuxDemux = require('mux-demux')
var net = require('net')
var client = MuxDemux()
var d = dnode()
d.on('remote', function (remote) {
console.log('in remote')
remote.foo(function (p) {
console.log(p)
})
})
client.on('connection', function (c) {
console.log('connection' + c.meta)
if (c.meta == 'dnode') {
d.pipe(c).pipe(d)
}
})
client.pipe(net.connect(3000)).pipe(client)
var dnode = require('dnode')
var d = dnode.connect(3000)
d.on('remote', function (remote) {
console.log('in remote')
remote.foo(function (p) {
console.log(p)
})
})
var dnode = require('dnode')
var MuxDemux = require('mux-demux')
var net = require('net')
var server = MuxDemux()
var d = dnode({
foo: function (cb) {
cb(['bla', 'dude'])
}
})
d.pipe(server.createStream('dnode')).pipe(d)
net.createServer(function (client) {
client.pipe(server).pipe(client)
}).listen(3000)
var dnode = require('dnode')
var d = dnode({
foo: function (cb) {
cb(['bla', 'dude'])
}
})
d.listen(3000)
@nakosung
Copy link

I had the same problem before. According to node.js doc, stream's behavior is somewhat strange. The mux-demux stream which was created in server-nope.js is resumed before got piped thru 'client' stream. This causes to drop off dnode's initial handshake packets. To remedy this situation there are two possible solutions.
#1 : Do not create mux demux stream before.

  • move your mux-demux, dnode code inside net.createServer function() { ## HERE ## }.
    #2 : Pause your mux-demux stream and resume when you need it.
  • server.pause() after line 5, server.resume() after line 14.

@nakosung
Copy link

check my gist : https://gist.github.com/nakosung/6044876

pause-stream can be a cure for unpausable mux-demux.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment