如何接收来自套接字的参数.. io使用baconJS发出事件



我需要一些插座的帮助。io和bacon.JS:

客户端有一个套接字。IO发出事件,向服务器发送2个参数,如下所示:

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

然后在服务器端,我需要接收这两个参数,以便我可以用它们做事情。

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

    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,并使用参数。

有人能帮我吗?

我解决了!

原来是使用bacon.js +套接字发送对象。io组合。

发出套接字时。使用对象作为参数的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);
    });

相关内容

  • 没有找到相关文章