【发布时间】:2014-03-01 00:13:16
【问题描述】:
我有一个 nodejs 客户端将大约 200k 的文本文件流式传输到服务器 nodejs 应用程序,该应用程序将信息保存在 mongodb 表中。
它在处理小文件时效果很好,但在使用大文本文件时,服务器会多次说“从...接收到的数据”流式传输一个唯一文件,就像服务器将文件分成几部分并以 170k 的速度打开一样文件流,mongodb 中的 3 个条目,当我只想要一个时。
感谢您的帮助
这是服务器:
var net = require('net'),
fs = require('fs'),
buffer = require('buffer');
var server = net.createServer(function(conn) {
console.log('server connected');
});
var HOST = '127.0.0.1';
var PORT = '9001';
// DB Config
var databaseUrl = "logserver";
var collections = ["logs"]
var db = require("mongojs").connect(databaseUrl, collections);
server.listen(PORT, HOST, function() {
//listening
console.log('Listening on port ' + PORT + '\n');
server.on('connection', function(conn) {
var current_time = Date.now();
console.log('connection made...\n')
conn.on('data', function(data) {
console.log('data received from ' + conn.remoteAddress);
db.logs.save({log_timestamp: current_time, client_ip: conn.remoteAddress, log_data: data.toString('utf8')}, function(err, saved) {
if( err || !saved ) console.log("- Log not saved -");
else console.log("- Log saved -");
});
});
})
});
这是客户端:
var net = require('net');
var fs = require('fs');
var PORT = 9001;
var HOST = '127.0.0.1';
var FILEPATH = 'file.txt';
var client = new net.Socket()
//connect to the server
client.connect(PORT,HOST,function() {
'Client Connected to server'
//send a file to the server
var fileStream = fs.createReadStream(FILEPATH);
fileStream.on('error', function(err){
console.log(err);
})
fileStream.on('open',function() {
console.log('Sending log file...');
fileStream.pipe(client);
});
});
//handle closed
client.on('close', function() {
console.log('Connection finished')
});
client.on('error', function(err) {
console.log(err);
});
【问题讨论】: