如何从NodeJS向客户端发送大数据? 我试过这两个: 1. Socket.io请求 2. Ajax GET请求 但两种方式都很慢。 我正在使用mongoDB。数据大小将是1,000,000+个对象(1-2GB),但即使是10,000个数据发送,也是如此之慢。 我怎样才能让它更快? (从MongoDB到NodeJS的数据读取时间没有问题。)
这是Socket.io代码
=>的NodeJS
io.sockets.on('connection', function(socket) {
socket.on('getData', function() {
var items = TestModel.find();
items.find({},function(err,obj){
for(var i=0;i<obj.length;i++){
socket.emit('responseData', obj[i]);
}
socket.emit('complete',"Item length : ");
});
});
});});
如果我使用socket.emit(&#39; responseData&#39;,obj),我会遇到溢出错误
=&GT;的index.html
<html>
<head>
<meta charset="utf-8"/>
<script src="/socket.io/socket.io.js"></script>
<title></title>
</head>
<body>
Socket.io Test
</body>
<script>
window.onload = function() {
var socket = io.connect();
socket.emit('getData');
var i=0;
//socket.emit('getName');
socket.on('responseData', function(data) {
i++;
});
socket.on('complete',function(data){
alert(data+i);
});
};
</script>
</html>
这是Ajax GET代码
=&GT;的NodeJS
app.get('/load',function(req,res){
var items = TestModel.find();
console.log("Model loaded");
items.find({},function(err, obj){
res.send(JSON.stringify(obj));
console.log("Sent Models");
});
});
=&GT; Ajax的
$(function(){
$(document).ready(function(){
$.get('/load', {}, function(data){
...
});
});});
答案 0 :(得分:0)
检查和/或启用压缩,您可以获得高达10倍的增益,具体取决于数据和格式。压缩质量和服务器CPU使用之间存在权衡,一般来说,从最佳压缩算法浏览器(或客户端)支持开始。
如果客户在您的控制之下,您甚至可以尝试xz
或更具异国情调的东西:)
标记您的回复(https://en.wikipedia.org/wiki/HTTP_ETag)并为If-None-Match: ...
请求标题字段添加摘要。
取决于客户端使用数据的内容,是否已保存?处理?显示?在许多情况下,客户端可以开始对部分数据执行操作。如果该部分处于响应的开始,则流式传输很有意义
客户端可以使用Range: ...
请求标头字段来下载数据段。在这种情况下,单个客户端可以同时针对给定数据集的段发出多个请求。如果客户的网络很糟糕(例如另一个大陆),这通常会有所帮助。
也许客户可以先处理或“显示”简化的数据表示。如果客户端背后有人工用户,他们可能希望在决定下载之前快速检查您的数据。对于在服务器端生成缩略图或预览的图像和设计文档非常常见。