我有一个nodejs服务器,它通过Web套接字向web客户端发送大量数据(使用socket.io和socket.io-client)。
我正在尝试在处理低带宽客户端时优化我的系统,而我的服务器生成的数据比我的客户端能够接收的速度快(由于其低带宽链接)。
为了优化我的系统,我需要知道我的客户端是否已经读取了上一条消息(然后我可以另外发送另一条消息)或者它没有(然后我将汇总我的消息,直到它会发生)。
socket.io或nodejs是否有任何API可以让我知道这些信息?
P.S。 我已经尝试听过engine.io的'drain'事件,但它的级别太高了(它没有告诉客户端是否读了我的消息)。
答案 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);
});
});