2015-03-11 18 views
5

Sto riscontrando alcuni problemi con la versione più recente di sails.js (0.11.0). Ha dichiarato in github che il semplice codice socket.io sarà accettato ed eseguito in sails.js; tuttavia, sto semplicemente cercando di emettere un messaggio da un client quando si clicca su qualcosa in questo modo:Emissione di un messaggio in vele v0.11 (lato client)

$('#myBtn').on('click', function(){ 
    io.socket.emit('message', { 
     message: { 
      subject: subject 
     }, 
     sender: id 
    }); 

}); 

io alla fine ottenere un "TypeError Uncaught: undefined non è una funzione" sulla linea di io.socket.emit() aka emit non è una funzione di io.socket.

Ecco alcuni riferimenti che ho guardato:

Ho la sensazione che con la versione aggiornata di vele, invece di emettere un messaggio dovrei essere fare qualcosa sulla falsariga di:

io.socket.post('/user/message', data, function(data, jwres) { 

}); 

Qualcosa mi riguarda con la seguente risposta qui:

Essa afferma "aule" sono obsolete con publishCreate, publishDestroy, introduce e obituary.

Così seguo un paradigma Pub/Sub, riscrivo il mio codice più "socket-io-ish" per utilizzare le vele Blueprints & Pub/Sub o continua nel mio socket-io fashion?

C'è un altro modo di emettere un messaggio dal client utilizzando le vele?

risposta

2

Si è certi che il modo consigliato di comunicare con il server tramite prese è quello di utilizzare RESTful socket client methods. Il vantaggio è che è possibile utilizzare l'instradamento regolare di Sails e l'architettura controller/azione per le comunicazioni socket invece di dover supportare un intero altro livello di sottoscrizione e gestione degli eventi nel back-end. Questo è uno dei motivi principali per cui @mikermcneil ha originariamente creato Sails. Due cose da notare:

  1. È possibile utilizzare req.isSocket nella vostra azione di controllo per determinare se la richiesta proviene da un socket, e
  2. È possibile ottenere le materie prime, alla base socket.io esempio sul client con io.socket._raw , che avrà il metodo emit. Ma ancora una volta, questa non è la pratica raccomandata.