如何接收从socket.io发送的参数使用baconJS发出事件?

我需要一些与socket.io和bacon.JS的帮助:

我在客户端有一个socket.IO发送事件,发送2个参数到服务器,如下所示:

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

然后在服务器端,我需要接收这2个参数,所以我可以做的东西与他们。

按照这个答案的例子,我试着做这样的事情:

  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); }); }); 

但它没有工作。

总结一下,我需要在服务器上以事件stream的forms接收事件,并使用这些参数。

谁能帮我?

我解决了它!

原来你使用bacon.js + socket.io组合发送对象

当以对象作为参数发送一个socket.io事件时,您可以在事件stream中捕获此事件,并且该stream上的每个事件实际上都是您作为参数发送的对象。

所以我做的是:

 //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); });