2016-10-21 5 views
1

私はsocket.ioとbacon.JSといくつかの助けが必要です:baconJSを使用してsocket.io emitイベントから送信されたパラメータを受け取る方法は?

私はクライアント側で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のコンボを使用して送信します。

オブジェクトをパラメータとして持つ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); 
    }); 
関連する問題