socket.io 节点 js 上的数据发送事件
Data sent evet on socket.io nodejs
我有一个 nodejs 服务器,它通过网络套接字(使用 socket.io 和 socket.io-client)向网络客户端发送大量数据。
我正在尝试在处理低带宽客户端时优化我的系统,我的服务器生成数据的速度比我的客户端能够接收的数据快(由于其低带宽 link)。
为了优化我的系统,我需要知道我的客户是否已经阅读了上一条消息(然后我可以安全地发送另一条消息)或者它没有(然后我会聚合我的消息直到它会)。
socket.io或者nodejs有没有API可以让我知道这个信息?
P.S。
我已经尝试收听 engine.io 的 'drain' 事件,但它的级别太高(它无法判断客户端是否阅读了我的消息)。
emit 方法的第三个参数接受一个回调,该回调将传递给服务器,这样您就可以用您想要的任何数据调用确认。它实际上非常方便并且节省了配对呼叫响应事件的工作量。
我正在用我刚测试过的一些代码更新我的答案。
首先在服务器端
io.sockets.on('connection', function(sock){
console.log('Connected client');
sock.emit('connected', {connected:'Yay!'});
// 客户端将 'callback' 作为函数传递。当我们在服务器上调用回调时
// 客户端的代码将 运行
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);
});
// 'connected' 是我们的自定义消息,让我们知道用户已连接
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);
});
});
我有一个 nodejs 服务器,它通过网络套接字(使用 socket.io 和 socket.io-client)向网络客户端发送大量数据。
我正在尝试在处理低带宽客户端时优化我的系统,我的服务器生成数据的速度比我的客户端能够接收的数据快(由于其低带宽 link)。
为了优化我的系统,我需要知道我的客户是否已经阅读了上一条消息(然后我可以安全地发送另一条消息)或者它没有(然后我会聚合我的消息直到它会)。
socket.io或者nodejs有没有API可以让我知道这个信息?
P.S。 我已经尝试收听 engine.io 的 'drain' 事件,但它的级别太高(它无法判断客户端是否阅读了我的消息)。
emit 方法的第三个参数接受一个回调,该回调将传递给服务器,这样您就可以用您想要的任何数据调用确认。它实际上非常方便并且节省了配对呼叫响应事件的工作量。
我正在用我刚测试过的一些代码更新我的答案。
首先在服务器端
io.sockets.on('connection', function(sock){
console.log('Connected client');
sock.emit('connected', {connected:'Yay!'});
// 客户端将 'callback' 作为函数传递。当我们在服务器上调用回调时 // 客户端的代码将 运行
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);
});
// 'connected' 是我们的自定义消息,让我们知道用户已连接
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);
});
});