SORU
15 Mart 2011, Salı


Dnode ve nowjs arasındaki fark nedir?

Nasıl ikisi birbirleriyle karşılaştırmak mı?

CEVAP
16 Mart 2011, ÇARŞAMBA


TL;DR

DNode

  • RMI sağlar;
  • uzaktan fonksiyonları argüman olarak geri aramaları kabul edebilir;
  • güzel olan, tamamen uyumsuz olduğu;
  • çalışır, tek başına veya varolan bir http sunucusu üzerinden;
  • tarayıcı ve Düğüm müşterileri var;
  • destekler connect; gibi katman sadece
  • NowJS daha uzun civarında olmuştur.

NowJS

  • sadece RMI ötesine geçer ve uygulayan bir "paylaşılan kapsam" API. It's like Dropbox tek dosyalar yerine değişkenleri ve fonksiyonları;
  • uzaktan fonksiyonlarıayrıca geri aramaları kabul(thanks to Sridatta and Eric from NowJS for the clarification);
  • iş dinlemekten http Sunucusu bağlıdır;
  • sadece tarayıcı istemcileri olabilir;
  • halkla çok yakın zamanda oldu;
  • biraz şimdi adamcağız.

Sonuç

NowJS olgunlaştığında şimdi ... ama dikkat et bir oyuncak değil. İçin ciddi şeyler, belki DNode ile gitmek. Bu daha detaylı bir inceleme için kütüphaneler, birlikte okuyun.

DNode

DNode Çağırma çerçeve Uzak bir Yöntem sağlar. Hem istemci hem de sunucu birbirimizi işlevleri kullanır.

// On the server

var server = DNode(function () {
    this.echo = function (message) {
        console.log(message)
    }
}).listen(9999)

// On the client

dnode.connect(9999, function (server) {
    server.echo('Hello, world!')
})

DNode() geçirilen işlevleri için geçirilen değil aksine bir işleyici http.createServer. İki parametre vardır: client erişmek için kullanılabilir fonksiyonları istemci ve connection tarafından verilen işlemek için kullanılabilir bağlantı ile ilgili olaylar:

// On the server

var server = DNode(function (client, connection) {
    this.echo = function (message) {
        console.log(message)
        connection.on('end', function () {
            console.log('The connection %s ended.', conn.id)
        })
    }       
}).listen(9999)

Verilen yöntemlerden bir şey, fonksiyonları da dahil olmak üzere geçirilebilir. Düzgün DNode tarafından vekiller olarak tamamladı ve diğer uç noktada geri çağırdı. Bu temel: DNode tamamen uyumsuz; beklerken engellemez geri dönmek için uzaktan bir yöntem için:

// A contrived example, of course.
// On the server

var server = DNode(function (client) {
    this.echo = function (message) {
        console.log(message)
        return 'Hello you too.'
    }
}).listen(9999)

// On the client

dnode.connect(9999, function (server) {
    var ret = server.echo('Hello, world!')
    console.log(ret) // This won't work
})

Geri diğer yanıtları almak için etrafında geçti olmalı son nokta. Karmaşık konuşmaları oldukça hızlı okunamaz hale gelebilir. This question Bu sorun için Olası çözümler anlatılır.

// On the server

var server = DNode(function (client, callback) {
    this.echo = function (message, callback) {
        console.log(message)
        callback('Hello you too.')
    }

    this.hello = function (callback) {
        callback('Hello, world!')
    }
}).listen(9999)

// On the client

dnode.connect(9999, function (server) {
    server.echo("I can't have enough nesting with DNode!", function (response) {
        console.log(response)
        server.hello(function (greeting) {
            console.log(greeting)
        })
    })
})

DNode istemci komut dosyası Düğüm bir örneği içinde çalışan olabilir ya da olabilir bir web sayfası içinde gömülü. Bu durumda, yalnızca sunucuya bağlanmak olacaktır web sayfasının sunumu. Connect Bu durumda bana çok yardımı olur. Bu senaryoda, Internet Explorer 5.5 ve 7 ile tüm modern tarayıcılar ile test edildi.

DNode bir yıldan kısa bir süre önce, Haziran 2010 tarihinde başladı. Bir Düğüm kadar olgun değil kütüphane olabilir. Benim testlerde, hiçbir belirgin sorunlar buldum.

NowJS

NowJS sevimli olmak konusunda sınırları sihirli API bir tür sağlar. Sunucu vardır everyone.now kapsam. everyone.now içine koymak her şey olur now kendi dürbünüyle her müşteri için görünür.

Bu kod, sunucu üzerinde, her istemci ile echo bir işlevi paylaşacak yazar sunucu için bir konsol iletisi:

// Server-side:

everyone.now.echo = function (message) {
    console.log(message)
}

// So, on the client, one can write:

now.echo('This will be printed on the server console.')

Bir sunucu tarafı" fonksiyonu çalışır this now bir öznitelik olacak "paylaşılan zaman bu çağrıyı yapan istemci için geçerlidir.

// Client-side

now.receiveResponse = function (response) {
    console.log('The server said: %s')
}

// We just touched "now" above and it must be synchronized 
// with the server. Will things happen as we expect? Since 
// the code is not multithreaded and NowJS talks through TCP,
// the synchronizing message will get to the server first.
// I still feel nervous about it, though.

now.echo('This will be printed on the server console.')

// Server-side:

everyone.now.echo = function (message) {
    console.log(message)
    this.now.receiveResponse('Thank you for using the "echo" service.')
}

NowJS işlevler dönüş değerleri olabilir. Onları almak için geri olmalıdır geçti:

// On the client

now.twice(10, function (r) { console.log(r) }

// On the server

everyone.now.twice = function(n) {
    return 2 * n
}

Bu eğer dürüst bir argüman olarak geri geçirmek istiyorsanız bir anlam içerir (değil dönüş değeri toplamak) -- her zaman bir dönüş değeri, toplayıcı, ya da geçmelidir NowJS karışık olabilir. Geliştiriciler göre alınıyor bu şekilde örtülü bir geri dönüş değeri muhtemelen gelecekte de değişmeyecek:

// On the client

now.crunchSomeNumbers('compute-primes', 

    /* This will be called when our prime numbers are ready to be used. */

    function (data) { /* process the data */ }, 

    /* This will be called when the server function returns. Even if we
    didn't care about our place in the queue, we'd have to add at least
    an empty function. */

    function (queueLength) { alert('You are number '   queueLength   ' on the queue.') }
)

// On the server

everyone.now.crunchSomeNumbers = function(task, dataCallback) {
    superComputer.enqueueTask(task, dataCallback)
    return superComputer.queueLength
}

Ve bu NowJS API için. Aslında 3 Daha fazla işlevleri vardır istemci bağlantı tespit etmek için kullanılır ve kopukluk. Onlar neden bilmiyorum bu özellikler EventEmitter ama. kullanarak ifşa etmedi

DNode aksine, NowJS istemci komut dosyası bir web tarayıcısı içinde çalışan olması gerekir. Sayfa komut dosyası içeren çalıştıran aynı Düğüm tarafından servis edilmelidir sunucu.

Sunucu tarafında, NowJS da bir http sunucu dinleme ihtiyacı var. Geçirilmelidir ne zaman başlatılıyor NowJS:

var server = http.createServer(function (req, response) {
    fs.readFile(__dirname   '/now-client.html', function (err, data) {
        response.writeHead(200, {'Content-Type':'text/html'})  
        response.write(data)
        response.end()
    })
})
server.listen(8080)
var everyone = now.initialize(server)

NowJS ilk bir kaç hafta önce (Mart 2011) olarak yorumlanır. Gibi, onu bekliyoruz adamcağız. Bu cevap yazarken issues kendimi buldum. Onun da bekliyoruz API bir sürü değiştirmek için.

Olumlu tarafta, geliştiriciler, Eric bile bana rehberlik erişilebilir çok geri aramalar çalışmak. Kaynak kodu belgelenmiş değil, ama neyse. basit ve kısa Kullanım Kılavuzu ve örnek bir başlangıç için yeterli.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • InfoPuppet

    InfoPuppet

    15 Kasım 2011
  • Peter Sharp

    Peter Sharp

    11 ŞUBAT 2013
  • sonia989

    sonia989

    26 EKİM 2006