如何接收从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); });