要求:web服务,记录每次访问记录,保存到文本文件。 测试目的:异步读写文件是否安全,多人访问下是否可以完整记录。
代码,先写个最简单的代码进行测试。把每次访问的url记录下来。
测试方法,在一个网页里使用多个iframe,模拟多人同时访问。
var fs = require('fs'); var http = require("http"); http.createServer(function (request, response) { response.writeHeader(200, { "Content-Type": "text/html" }); response.write("Hello World编码!
\n"); response.write("
url:"+request.url);if (request.url != '/favicon.ico'){ fs.readFile('./json.txt', 'utf8', function(err, data){ console.log(data); fs.writeFile('./json.txt',data +'\r\n'+ request.url ,function(err){ if(err) console.log('写文件操作失败'); else console.log('写文件操作成功 ' + request.url); }); }); } response.end();}).listen(8080);
网页访问
Title
首先问问这种写法有没有什么致命问题,如果有的话,怎么改代码。
这个代码有个小问题,没有事先判断文件是否存在,但是这个不是大事。
测试方法,打开那个有很多iframe的网页,模拟多次访问,然后看看日志文件,然后刷新页面,再次看内容,重复多次。
理想情况下,每次访问都会先读取文件内容,然后把url加在最后,在重新保存文件,这样每次访问都会被记录下来,不会有漏掉的。
但是实际测试的时候却发现,不仅有漏掉的访问记录,而且还会把上一轮的内容覆盖掉。 但是并不是每次都会把以前的记录覆盖掉。 完全没发现任何规律。
刷新两次网页后,日志文件是这个样子的
/cccccccccccc /ddddddddddddd /eeeeeeeeeeeeee /fffffffffffffff /gggggggggggggggg /hhhhhhhhhhhhhhhhhh /1 /333 /55555 /7777777 /88888888 /999999999 /aaaaaaaaaa /bbbbbbbbbbb /cccccccccccc /ddddddddddddd /eeeeeeeeeeeeee /fffffffffffffff /gggggggggggggggg /hhhhhhhhhhhhhhhhhh
再刷新网页,又变成这个样子
/666666 /aaaaaaaaaa /bbbbbbbbbbb /ddddddddddddd /eeeeeeeeeeeeee /fffffffffffffffg /hhhhhhhhhhhhhhhhhh /1 /333 /4444 /55555 /666666 /7777777 /88888888 /aaaaaaaaaa /bbbbbbbbbbb /cccccccccccc /ddddddddddddd /fffffffffffffff /hhhhhhhhhhhhhhhhhh
再刷新,简单了,就剩下六行了。
/cccccccccccc /ddddddddddddd /eeeeeeeeeeeeee /fffffffffffffff /gggggggggggggggg /hhhhhhhhhhhhhhhhhh
每次刷新网页后,日志文件的内容都不完整,而且没发现啥规律。