2016-10-21 4 views
1

мне нужна помощь с Socket.io и bacon.JS:Как получить параметры, отправленные из события сокета socket.io, используя baconJS?

я на стороне клиента socket.IO испускать событие, которое посылает 2 параметра на сервер, как показано ниже:

$("#btn").asEventStream("click").onValue(function(){ 
    socket.emit("event", param1, param2); 
}); 

Затем на стороне сервера мне нужно получить эти 2 параметра, чтобы я мог делать с ними все.

Следуя примеру на this answer, я пытался сделать что-то вроде этого:

io.on('connection', function (socket) { 
     socket.on('error', function (err) { 
      console.log(err); 
     }); 

     Bacon.fromEvent(socket, "event", param1, param2) 
      .filter(function(param1, param2){ return true }) 
      .forEach(function(param1, param2){ 
       doStuff(param1, param2); 
      }); 
    }); 

Но это не сработало.

Подводя итог, мне нужно получить событие на сервере как EventStream и использовать параметры.

Может ли кто-нибудь мне помочь?

ответ

2

Я решил это!

Оказывается, вы отправляете объектов, используя bacon.js + socket.io combo.

Когда вы генерируете событие socket.io с объектом как параметром, вы можете зафиксировать это событие в потоке событий, и каждое событие в этом потоке будет фактически объектом, который вы отправили в качестве параметра.

Так что я сделал:

//client side 
$("#btn").asEventStream("click").onValue(function(){ 
    var obj = {p1: param1, p2: 'param2'}; 
    socket.emit("someEvent", obj); 
}); 

//server side 
Bacon.fromEvent(socket, "someEvent") 
    .onValue(function(data){ 
     doStuff(data.p1, data.p2); 
    }); 

Или вы можете сделать что-то с объектом и испускают событие сокета назад в результате, как это:

//server side 

//doStuff can return anything, it doesn't have to be an object 
function doStuff(data){if data.p2 === 'param2' {return true}}; 

Bacon.fromEvent(socket, "someEvent") 
    .map(function (data) { return doStuff(data) }) 
    .onValue(socket, "emit", "returnEvent"); 

, а затем вы можете захватить событие возврата на стороне клиента, и каждое событие в этом результирующем EventStream будет возвратом функции «doStuff»:

//client side 
Bacon.fromEvent(socket, "returnEvent") 
    .onValue(function(data){ 
     console.log(data); 
    }); 
Смежные вопросы