2012-05-10 2 views
5

Ho intenzione di creare un'applicazione web per gestire le note (pensa a qualcosa di simile a Evernote). Ho deciso di utilizzare il lato client Backbone.js + JQuery. Lato server, non ho ancora deciso: o PHP puro (che conosco molto bene) o Node.js + Socket.io (completamente nuovo per me).Node.js e Socket.io: fino a che punto possono andare con le applicazioni web in tempo reale?

Sto considerando Node.js + Socket.io perché mi piacerebbe avere la mia applicazione web in tempo reale (cioè: se un utente aggiorna una nota, quella nota viene aggiornata istantaneamente per un collaboratore che condivide quella nota, senza ricaricare la pagina).

Stavo anche considerando, come terza alternativa, di utilizzare Node.js e Socket.io per l'interfaccia utente e PHP per l'API REST (mi sento più a mio agio nel costruire un'API con PHP). Il codice PHP e Javascript condivideranno il database MongoDB.

La mia domanda è questa: se sviluppo l'API REST per la mia applicazione Web con PHP e una nuova nota per l'utente viene creata tramite l'API (ad esempio: l'app Android invia una richiesta API per creare quella nota), Node.js, Socket.it e Backbone.js sono in grado di aggiornare istantaneamente l'interfaccia utente dell'utente e mostrare la nuova nota sul loro schermo? Penso che possa essere chiamato "notifica push".

Spero di essere stato abbastanza chiaro.

Inoltre, esiste una tecnologia alternativa eccezionale per la creazione di applicazioni Web in tempo reale?

risposta

9

Sì Node.js + Socket.IO farà un ottimo lavoro. Il nodo usa un ciclo di eventi, questo significa che su una richiesta viene inserito in una coda. Il nodo gestisce queste richieste una per una. I server Web tradizionali gestiscono un approccio "Thread-per-request" in cui viene creato un thread per gestire tali richieste.

Il vantaggio del nodo qui è che non è necessario cambiare contesto così spesso, questo significa che può gestire queste richieste molto rapidamente ... molto probabilmente più veloce del server PHP. Tuttavia, il nodo viene eseguito come un singolo processo, su un singolo core della CPU. Se la tua applicazione è ad alta intensità di CPU, potrebbe essere bloccata, il che significa che il tempo per ogni richiesta sarà più lento.

Tuttavia, mi sembra che la tua applicazione non abbia un uso intensivo della CPU, il che significa che Node.js funzionerà bene.

Decisione Se il tuo tempo è limitato e non vuoi imparare una nuova abilità (Nodo), PHP andrà bene. Se hai il tempo, ti consiglio di imparare Node.js, in quanto è molto forte quando si tratta di attività intensive di I/O come l'API REST per la creazione di Notes.

l'aggiornamento dell'interfaccia utente Se la vostra destinazione d'uso è attraverso un dispositivo mobile, mi consiglia di utilizzare WebSockets ma avere un ripiego, come a lungo polling. È possibile aggiornare l'interfaccia utente del client utilizzando Node o PHP. Tuttavia dalla mia esperienza è molto più facile farlo utilizzando Socket.IO su Node.js.

Esempio Aggiornamento del client tramite Node.js/Socket.io

lato client

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

lato server

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

Guida rapida a Node: How do I get started with Node.js

Si prega inoltre di notare che, se si vuole costruire un app mobile Android nativa che utilizza WebSockets ... è necessario utilizzare: Java socket.io client

+0

Jack, grazie per la risposta. E per quanto riguarda il tempo reale? Una modifica attraverso l'API REST implementata con PHP si rifletterà immediatamente nell'interfaccia utente? – dan

+1

Ho aggiunto alcune informazioni sull'aggiornamento dell'interfaccia utente. Il mio progetto per l'ultimo anno all'università era molto simile a quello che stai creando ... Ho usato Node.js/Express/Socket.IO e ho memorizzato le "Note" in un database MongoDB. – Jack

+0

Ottimo! E tu riesci a far funzionare tutto in tempo reale? – dan

2

L'utilizzo di Node.js per server Web e server push è ovviamente il modo migliore. Tanto più che se usi Node.js comunque devi impararlo, quindi imparare a creare un server web è naturale (ti consiglio di usare il più famoso Express framework).

Ora è possibile utilizzare PHP per server Web e Node.js per server di push. Per farli comunicare tra loro probabilmente vorrai aggiungere Redis alla tua applicazione. Redis ti permetterà di inviare notifiche a qualsiasi client connesso ad esso, come server PHP o server push Node.js (e si adatta bene). Da quel momento il server push spingerà ulteriormente i dati al browser del cliente.

La tecnologia alternativa sarebbe ad esempio Twisted server. Ovviamente avrai bisogno di imparare Python per poterlo usare. E non so se supporta correttamente WebSockets. Penso che dovresti seguire Node.js + socket.io.

+0

Grazie stravagante. Quindi stai dicendo che se tolgo PHP dall'equazione e costruisco su Backbone, Node, Socket.io NON ho bisogno di Redit per avere un'app web in tempo reale. È giusto? – dan

+0

IS Express sostituisce Backbone.js? – dan

+1

@dan Sì, tecnicamente non ne hai bisogno. Ma dovresti comunque usarlo, dato che socket.io non è in grado di scalare su molte macchine senza di esso (o almeno non conosco l'altro modo per ridimensionarlo). Quindi dovresti usare Redis, a meno che tu non pensi che una macchina sarà sufficiente per la tua app. Ma non dovresti fare queste supposizioni. :) – freakish