2016-10-21 7 views
1

나는 socket.io와 bacon.JS와 도움이 필요baconJS를 사용하여 socket.io emit 이벤트에서 보낸 매개 변수를받는 방법은 무엇입니까? 아래 그림과 같이 나는 socket.IO가 서버에이 개 매개 변수를 보내는 이벤트를 방출 클라이언트 측에서이</p> <p>:

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

그런 다음 서버 측에서이 두 매개 변수를 받아야만 할 수 있습니다. 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 콤보를 사용하여 개체을 보냅니다.

개체를 매개 변수로 사용하여 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); 
    });