2012-05-10 10 views
5

Ben notları (Evernote benzer şeyler düşün) yönetmek için bir web uygulaması oluşturmak için gidiyorum. Backbone.js + JQuery istemci tarafını kullanmaya karar verdim. Sunucu tarafı henüz karar vermedim: Saf PHP (ben çok iyi biliyorum) veya (benim için tamamen yeni) node.js + Socket.io ya.Node.js ve Socket.io - gerçek zamanlı web uygulamalarıyla ne kadar ileri gidebilirler?

Node.js + Socket.io'yu düşünürüm çünkü web uygulamamın gerçek zamanlı olmasını istiyorum (örneğin: Bir kullanıcı bir notu güncellerse, o notu paylaşan bir ortak çalışan için bu not anında güncellenir. sayfayı yeniden yüklemeden).

Üçüncü bir alternatif olarak, Ude ve PHP için REST API'sı için Node.js ve Socket.io'yu kullanıyorum (PHP ile bir API oluşturmak için daha rahat hissediyorum). PHP ve Javascript kodu MongoDB veritabanını paylaşacak.

Soruma şudur: PHP ile web uygulamam için REST API geliştirirseniz ve kullanıcı için API aracılığıyla yeni bir not oluşturulursa (yani: Android uygulaması bu notu oluşturmak için bir API isteği gönderirse) Node.js, Socket.it ve Backbone.js kullanıcı UI'sını anında güncelleyebilir ve ekranda yeni notu gösterebilir mi? Bence "itme bildirimi" olarak adlandırılabilir.

Umarım yeterince açıkım. Ayrıca

, gerçek zamanlı web uygulamaları oluşturmak için herhangi bir alternatif üstün teknoloji var mı?

cevap

9

Evet node.js + Socket.IO bunun çok iyi bir iş yapacağız. Düğüm bir olay döngüsü kullanır, bu istek üzerine bir sıraya girilir. Düğüm, bu isteklerle tek tek ilgilenir. Geleneksel web sunucuları, bu istekleri işlemek için bir iş parçacığının oluşturulduğu bir 'İstek başına iş parçacığı' yaklaşımıyla ilgilenir.

burada Düğüm yararı

bağlam sık sık geçiş yapmayı bu daha hızlı PHP sunucusundan daha büyük olasılıkla ... çok çabuk bu taleplerin başa anlamına gelir, gerek olmamasıdır. Ancak Düğüm, tek bir CPU çekirdeğinde tek bir işlem olarak çalışır. Uygulamanız CPU yoğunsa, engelleme olabilir, yani her istek için zaman daha yavaş olur. Başvurunuz CPU yoğun olmadığı gibi

Ancak iyi çalışacaktır node.js anlamına bana geliyor. Zamanınız sınırlıysa, ve yeni bir beceri (Düğüm) öğrenmek istemiyorsanız

Karar PHP iyi olacak. Node.js'yi öğrenmenizi tavsiye ettiğim zamanınız varsa, Notlar oluşturmak için REST API gibi G/Ç yoğun görevleri söz konusu olduğunda çok güçlü olduğu için. amaçlanan kullanım bir mobil cihaz üzerinden gerçekleşiyorsa UI Güncellenmesi

, ben Yuvalarının kullanarak ancak böyle uzun yoklama gibi bir yedeği olmasını öneriyoruz. İstemci UI'sini Node veya PHP kullanarak güncelleştirmek mümkündür. Ancak benim deneyimime göre Node.js. üzerinde Socket.IO kullanarak bunu yapmak çok daha kolay.

Örnek Node.js/Socket kullanarak istemci güncelleniyor.io

İstemci taraflı

socket.on('new-note', function (data) { 
    placeNewNote(data); 
    }); 

socket.emit('new-note', data); 

Düğüm Başlarken Sunucu tarafı: How do I get started with Node.js

isterseniz de, unutmayın inşa etmek WebSockets kullanan yerel Android mobil uygulaması kullanmanız gerekecek: Java socket.io client

+0

Jack, cevabınız için teşekkürler. Peki ya gerçek zaman? PHP ile uygulanan REST API'sinden bir değişiklik UI'ye yansıtılır mı? – dan

+1

UI'nin güncellenmesi hakkında bazı bilgiler ekledim. Üniversitedeki son yıl projem, yarattığınız şeye çok benziyordu ... Node.js/Express/Socket.IO kullandım ve 'Notlar'ı bir MongoDB veritabanında sakladım. – Jack

+0

Harika! Ve her şeyin gerçek zamanlı çalışmasını sağladın mı? – dan

2

Hem web sunucusu hem de push sunucusu için Node.js'yi kullanmak elbette en iyi yoldur. Özellikle de Node.js'yi yine de kullanacak olursanız, bunu öğrenmek zorundasınız, bu yüzden bir web sunucusunun nasıl yapıldığını öğrenmek sadece doğaldır (en ünlü Express framework'u kullanarak tavsiye ediyorum).

Artık web sunucusu için PHP'yi ve push server için Node.js'yi kullanabilirsiniz. Birbirleriyle iletişim kurmak için muhtemelen uygulamanıza Redis eklemek isteyeceksiniz. Redis, PHP sunucusuna veya Node.js push sunucusuna (ve iyi ölçeklendirmeye) bağlı olarak, ona bağlı herhangi bir istemciye bildirim göndermenizi sağlar. Bu noktadan itme sunucusu verileri daha sonra müşterinin tarayıcısına doğru iter.

Alternatif teknoloji, örneğin Twisted server olabilir. Tabii ki kullanmak için Python'u öğrenmeniz gerekecek. Ve WebSockets'ı doğru olarak destekleyip desteklemediğini bilmiyorum. Bence Node.js + socket.io ile çalışmalısın.

+0

Teşekkürler çılgınca. Yani eğer PHP'yi denklemden çıkarırsam ve Omurga, Düğüm, Soket.io üzerine kurarsam gerçek zamanlı bir web uygulamasının olması için Redit'e ihtiyacım olmadığını söylersiniz. Bu doğru mu? – dan

+0

IS Backbone.js yerine bir değiştirme? – dan

+1

@dan Evet, teknik olarak buna ihtiyacınız yok. Ama yine de kullanmalısın çünkü socket.io onsuz birçok makineye ölçeklenemiyor (ya da en azından bunu ölçeklendirmenin başka bir yolunu bilmiyorum). Yani, bir makinenin uygulamanız için yeterli olacağını varsayarak Redis'i kullanmalısınız. Ama böyle varsayımlarda bulunmamalısınız. :) – freakish