2015-09-05 12 views
14

mio obiettivo:Sails.js semplice messaggistica privata (pub/sub e modelli)

Creare una piattaforma di messaggistica privata utilizzando Sails.js con il codice più semplice possibile


Ipotesi di buone pratiche:


Le mie domande:

  • Posso avere un orologio presa solo alcuni nuovi modelli (per esempio trovare dove ID utente corrisponde al mittente o al destinatario id) O devo impostare stanze? La visione selettiva sembra molto più semplice, ma la documentazione non sembra supportarla.
  • Se qualcuna delle mie precedenti ipotesi o domande non è il modo migliore per realizzare il mio obiettivo, qual è il modo più semplice per implementare la messaggistica privata utilizzando Sails?

che cosa ho provato:

  • Abbonamento e guardare una presa
  • Leggendo il Sails.js documentation
  • Guardando l'esempio sailsChat (utilizza camere)
  • Ricerca StackOverflow e Google per esempi di chat su vele
+3

Ogni domanda dovrebbe essere chiaro come questo. –

+0

Stai cercando di supportare solo le chat dirette qui?Oppure ci possono essere stanze con più persone che chattano? –

+0

A prima vista, le stanze sembrano essere la soluzione più semplice. Purtroppo non esiste un .watch selettivo. –

risposta

6

Il modo più semplice, suppongo, stia usando il socket.io implementato in vele, se non ricordo male si chiama semplicemente socket.

Tutti i controller possono essere chiamati con socket.io (lato client) IIRC. L'approccio che ho preso è quello di creare un modello chiamato messaggi, e quindi semplicemente creare pochi endpoint per i messaggi. Se si desidera utilizzare i modelli (pub/sub) è possibile iscriversi solo a quelli che si desidera. puoi abbonare ogni singolo utente a un solo modello, anche se ne hai molti.

Quello che ho usato è farlo manualmente, quando ricevo un messaggio, lo invierò immediatamente al client giusto. Ma se vuoi scrivere meno codice probabilmente devi semplicemente abbonare gli utenti al tuo modello Model.subscribe() (http://sailsjs.org/documentation/reference/web-sockets/resourceful-pub-sub/subscribe) così quando un messaggio viene aggiunto al Database, puoi inviarlo a chiunque tu voglia.

Ecco un altro esempio di una chat costruito sulla cima di sails.js: https://github.com/asm-products/boxychat-old

+0

Se ogni cliente sta guardando i nuovi modelli di messaggi, quindi riceverebbe messaggi destinati ad altri utenti, giusto? Voglio assicurarmi che il server invii solo i messaggi al client ricevente, quindi la visione selettiva sarebbe ottima se possibile. Il metodo subscribe() ottiene solo modifiche nei record _existing_ del database (non riceve messaggi .publishCreate()) in base ai documenti. Esiste un orologio selettivo()? In caso contrario, qual è il modo più semplice per fare messaggi? – smileham

+1

Ho avuto una lista di socket connessi all'IDutente, quando stavo inviando un messaggio, come 'POST/message/user1', quello che succede nel codice è che cerco l'utente1 se ha un socket nella mia lista (da redis) e quindi inviare il messaggio a lui 'lista ['utente1']. emit ('privateMessage', msg);' – DevAlien

+0

Certo, che funzionerebbe, ma che non sembra più facile che usare stanze. Perché hai scelto quella sopra le stanze? – smileham