数据发送到socket.io nodejs上

时间:2015-01-20 18:00:37

标签: node.js networking io socket.io

我有一个nodejs服务器,它通过Web套接字向web客户端发送大量数据(使用socket.io和socket.io-client)。

我正在尝试在处理低带宽客户端时优化我的系统,而我的服务器生成的数据比我的客户端能够接收的速度快(由于其低带宽链接)。

为了优化我的系统,我需要知道我的客户端是否已经读取了上一条消息(然后我可以另外发送另一条消息)或者它没有(然后我将汇总我的消息,直到它会发生)。

socket.io或nodejs是否有任何API可以让我知道这些信息?

P.S。 我已经尝试听过engine.io的'drain'事件,但它的级别太高了(它没有告诉客户端是否读了我的消息)。

1 个答案:

答案 0 :(得分:3)

emit方法的第三个参数接受一个将传递给服务器的回调,以便您可以使用您希望的任何数据进行确认。它实际上非常方便,可以节省配对呼叫响应事件的工作量。

我正在使用我刚刚测试的一些代码更新我的答案。

首先在服务器端

io.sockets.on('connection', function(sock){

console.log('Connected client');
sock.emit('connected', {connected:'Yay!'});

//客户端传递'回调'作为一个功能。当我们在服务器上调用回调时 //客户端的代码将运行

sock.on('testmessage', function(data, callback){
    console.log('Socket (server-side): received message:', data);
    var responseData = { string1:'I like ', string2: 'bananas ', string3:' dude!' };
    //console.log('connection data:', evData);
    callback(responseData);
});

});

在客户端:

console.log('starting connection...');
var socket = io.connect('http://localhost:3000');
socket.on('error', function(evData){
    console.error('Connection Error:',evData);
});

//'已连接'是我们的自定义消息,让我们知道用户已连接

socket.on('connected', function (data) {
    console.log('Socket connected (client side):', data);

    // Now that we are connected let's send our test call with callback
    socket.emit('testmessage', {payload:'let us see if this worketh'}, function(responseData){
        console.log('Callback called with data:', responseData);
    });
});