2015-09-23 10 views
14

Mentre c'era una buona documentazione per l'uso delle prese, grazie a Irl Nathon's Sails Cast series. Le cose sono cambiate in v0.11, con il team delle vele che avvolge e seppellisce le routine socket.io.Utilizzo di socket.io con le vele js

Il sito di vele ad es. SailsSocket è esasperatamente conciso, dicendo cosa fare, ma non come o dove farlo, o se ho bisogno di nm o bower qualcosa. Questo è stato particolarmente frustrante nel tentativo di utilizzare il numero sails.config.sockets parlato nel sito delle vele. Che non riesco nemmeno a trovare nelle mie directory v0.11.

In primo luogo, vorrei sapere come e dove creare la mia risposta a un io.socket.get o .post o qualsiasi altra cosa. Proprio ora quando faccio una get con qualcosa di simile:

`io.socket.request({ 
    method: 'get', 
    url: '/sites/2', 
    params: {}, 
    headers: {} 
},function serverResponded(body, JWR){console.log("Body: ", JSON.stringify(body,null, 4)); console.log(' JWR: ', JWR.body)});' 

torno:

undefined 
VM1149:7 "Not implemented in core yet" 
VM1149:7 JWR: Not implemented in core yet 

posso vedere i siti chiamati nella console vele, ma nulla si imbatte.

Credo sia perché ho definito i miei percorsi personali e ho trovato il mio ritrovamento: funzione nel mio controller del sito e manualmente devo inserire qualcosa nel socket del server. Ma sono confuso su come devo chiamare un'intera pagina con HTTP e solo le tabelle con socket.io nella stessa routine del controller.

  • Dove faccio a scrivere il mio basso livello socket.io routine che possono essere chiamate da una pagina web?

  • Continuo a farlo nel file app.js?

Sails Cast ha mostrato che è stato fatto lì, ma di nuovo le cose sono cambiate.

+0

Potrebbe [questo] (http://stackoverflow.com/questions/40021125/sails-io-js-io-socket-get-user-not-implemented-in-core-yet/40027253#40027253) guida per il thread tu? Penso che la domanda sia abbastanza simile ... –

+0

per favore fornisci maggiori informazioni come stai configurando i tuoi ganci –

risposta

0

Sails Le "richieste virtuali" (che chiamano queste richieste HTTP-ish basate su socket.io) vengono generalmente utilizzate per recuperare o inviare dati JSON al server. Inoltre, se uno script sul lato client effettua una richiesta virtuale, il server può aggiungere o rimuovere il socket richiedente da/verso le stanze.

Si noti che l'utilizzo di un "metodo virtuale" alla fine eseguirà la stessa azione del controller, ma imposterà req.isSocket = true.

Questo esempio è una vista che rende una vista per richieste HTML-volendo ma restituisce dati JSON per le richieste basati su socket:

... 
// 'get /sites/:id': 'SomeController.showSite' (should be put in your `routes.js`) 
showSite: function(req, res) { 
    // load something from the database 
    Site.findOne(req.param('id')).exec(function(err, site) { 
    // handler errors (same for HTTP or sockets) 
    if (err) return res.serverError(); 
    if (!site) return res.notFound(); 

    if (req.isSocket) return res.json(site); // render JSON response for our `site` object 
    else return res.view('sites/show', {site: site}); // render an HTML view 
    }); 
} 

Quanto basso livello socket.io, vele fornisce la variabile globale io (da sails.io.js), che è un'istanza di SailsSocket. Ti permette di fare "richieste virtuali" HTTP-ish. Maggiori informazioni here (anche se sembra che tu abbia già letto tutto quello che c'è da leggere su SailsSocket :). È possibile accedere al client socket.io sottostante con io.socket._raw.

// do this in the browser. 
// sails.io.js should be included in layout.ejs by default. 
io.socket.get('/site/2', console.log); // "virtual request" 
// neat little trick  ^^^^^^^^^^^  for testing :) 
var rawIO = io.socket._raw; 
rawIO.emit('some:event', "using native socket.io"); 

Spero che questo aiuti!