2015-06-04 19 views
9

sunucusu yayar [email protected] ile komut dosyası ve [email protected]sails.js için node.js soket müşteri ile bir olay (0.11.x)

Büyük resim: Ben var ya olacak, sails.js sunucusuna bağlanmak node.js komut bir çiftlik ve çeşitli görevleri yerine getirecek.

Derhal Hedef:

socket.emit('got_job', job.id); 

Neden: Ben gibi client-> sunucudan bir soket bağlantısı sırasında bir olayı yayarlar istiyor? Bu mümkün ise, sunucu tarafında bir denetleyicide (veya denetleyici + hizmet) çeşitli olay işleyicileri oluşturabilir ve bu komut grubunu desteklemek için istemci/sunucu uç noktaları arasında bir dizi durumlu işlemi yönetirken kodumu temiz tutarım.

dokümantasyon: Bu, bir yelkenler docs başına sails.js bunun için socket.io-istemcisi kullanarak ilgili anlatıldığı gibi: Ben bu bağlantı içinde ne dışında paylaşmaya pek koduna sahip https://github.com/balderdashy/sails.io.js?files=1#for-nodejs

, ama her ihtimale karşı buraya yapıştırın edeceğiz:

var socketIOClient = require('socket.io-client'); 
var sailsIOClient = require('sails.io.js'); 

// Instantiate the socket client (`io`) 
// (for now, you must explicitly pass in the socket.io client when using this library from Node.js) 
var io = sailsIOClient(socketIOClient); 

// Set some options: 
// (you have to specify the host and port of the Sails backend when using this library from Node.js) 
io.sails.url = 'http://localhost:1337'; 
// ... 

// Send a GET request to `http://localhost:1337/hello`: 
io.socket.get('/hello', function serverResponded (body, JWR) { 
    // body === JWR.body 
    console.log('Sails responded with: ', body); 
    console.log('with headers: ', JWR.headers); 
    console.log('and with status code: ', JWR.statusCode); 

    // When you are finished with `io.socket`, or any other sockets you connect manually, 
    // you should make sure and disconnect them, e.g.: 
    io.socket.disconnect(); 

    // (note that there is no callback argument to the `.disconnect` method) 
}); 

ben içine baktım ne: Ben bu nesnelerin çeşitli düzeylerde içine delinmiş ettik ve kullandığım maruz şey bulmak gibi olamaz. Ve basitçe io.socket.emit() 'yi var olmadığı için denemek. Ama io.socket.get() ve io.socket.post(), vb iyi çalışıyor.

console.log(socketIOClient); 
console.log(sailsIOClient); 
console.log(io); 
console.log(io.socket._raw); 
console.log(io.sails); 

Teşekkürler ve bunu açıklığa kavuşturmak için gerektiği gibi güncellemeyi deneyeceğim.

GÜNCELLEME:

Çeşitli Sunucu Bilgisi.: Ayrı portlar (3000-3003) üzerine

  • I (yakında daha ) 4'e işaret SSL sonlandırma ile, 443 numaralı bağlantı noktasında nginx kullanıyorum sails.js örnekleri.
  • Ayrıca oturumlar ve soketler için Redis kullanıyorum.
+0

Henüz bir çözüm bulamadım. Başka birinin buna katılıp katılmadığını bilmek güzel olurdu. – nodnarB

+0

Neden io.socket.disconnect(); 'kullanıyorsunuz? – Bulkin

+0

Ben de bununla uğraşıyorum ve bir çözüm bulmaya çalışıyorum. Ben sunucuya bir json mesaj ile yaymak ve olayı istiyorum. nodnarB bir geçici çözüm bulabildiniz mi? – zabumba

cevap

3

Sen yakınsın:

Kişisel io.socket.get çağrısı tür bir dinlenme API çağrısı gibidir. Sen,

//client 
io.socket.get('/hello', function serverResponded (body, JWR) { 
    //this is the response from the server, not a socket event handler 
    console.dir(body);//{message:"hello"} 
}); 

aradığınız yöntemdir

config/routes.js: 
{ 
'get /hello':'MyController.hello' 
} 

//controllers/MyController 
{ 
    hello:function(req,res){ 
    res.json({message:"hello"}); 
    } 
} 

yılında, io.socket url '/ merhaba' üzerinde bir get isteğine bağlı bir yelkenler denetleyicisi gerekiyordu.('EventName') üzerinde; Ne etkili bir yaptık olduğunu

//client 
    io.socket.get('/hello', function serverResponded (body, JWR) { 
     //all we're doing now is subscribing to a room 
     console.dir(body); 
    }); 
    io.socket.on('anevent',function(message){ 
     console.dir(message); 
    }); 


in 

    config/routes.js: 
    { 
    'get /hello':'MyController.hello' 
    } 

    //controllers/MyController 
    { 
     hello:function(req,res){ 
     sails.sockets.join(req.socket,'myroom'); 
     res.json({message:'youve subscribed to a room'}); 
     } 
    } 

, kurulum bizim soket temelde bir olay ad olan "oda", bir parçası olmak:

İşte bir örnek. Sonra, başka bir kontrolör sadece bunu yapmak zorunda: Bu çağrı yapıldığında

sails.sockets.broadcast('myroom','anevent',{message:'socket event!'}); 

sonra, io.socket.on ('anevent') arasında geri aramasında mesaj alacağını söyledi.

+0

sorusu, bir olayın tarayıcıdan sunucuya nasıl yayınlanacağıydı. Açıkladığınız şey, tüm bağlı istemcilere sunucudan yayılmaktır – zabumba