node.js - 如何将数组中的数据一一发送到socket.io
问题描述
当用户连接到网站时,我有一个包含 1000 个对象的数组,我想将这些数据一一发送给他。但不幸的是,这段代码不起作用。
io.on('connection', (socket) =>{
console.log('made socket connection');
for(i=0; i<data.length;i++){
socket.emit('initial', data[i]);
}
});
当我打开浏览器时,我需要等待 1.5 秒,然后我才能收到所有数据。您是否知道如何实时接收这些数据。谢谢
解决方案
我找到了实现这一目标的方法。我认为这是因为我在股票浏览器上同时发送了这么多数据,无法刷新,1 秒后(添加所有数据)浏览器刷新并显示所有数据。我不确定我的理解是否正确。但这是我添加的代码以使其正常工作。
io.on('connection', (socket) =>{
console.log('made socket connection');
var senddata = function(i){
if(i<data.length){
socket.emit('initial', data[i], function(confirmation){
i++
senddata(i);
});
}
}
senddata(0);
}
所以你怎么看我在等待回调,所以现在我看到数据一一出现。但是由于回调所以请求客户端-服务器和服务器-客户端需要更多的时间来加载浏览器中的所有数据。这就是我改变将部分数据发送到浏览器的方法并且只为每个数组数据进行少量回调的方式。我编写了简单的函数来将数组拆分为几个较小的数组,所以现在我们在浏览器和服务器之间拆分工作。
io.on('connection', (socket) =>{
console.log('made socket connection');
function sendinit(start, jump){
var last = start+jump;
if(last<data.length){
socket.emit('initial', data.slice(start,last), function(confirmation){
sendinit(last,jump);
});
}
else if(last>=data.length){
socket.emit('initial', data.slice(start,data.length), function(confirmation){
console.log('data have been sent');
});
}
}
sendinit(0,200);
}
我正在等待您的评论,您如何看待这种方法?
推荐阅读
- java - 从二进制堆转储中提取 JVM 正常运行时间
- python - Python argparse -h 选项点缀
- php - 使用修改过的 MustVerifyEmail 特征的 Laravel API 无法获取请求用户
- kotlin - Swagger-UI 和 Ktor 如何导入 swagger.json 或 .yaml 文件并启动 Swagger-UI?
- python - matplotlib 按钮在嵌套的 GridSpec 中不起作用
- php - 如何使用php ajax更新可排序的jquery ui中列表项的位置
- android - 从 env->functions 挂钩 JNI 函数在模拟器上不起作用
- api - Docusign:尝试从 UI5 应用程序的模板 ID 创建信封时出现 400 错误“无法解析多部分正文”
- java - Android 9.0 Activity 泄露了原本添加的窗口
- javascript - 如何从 Laravel Blade 传递 React 全球商店提供者的默认状态?