Servlet 接收请求如何以秒为单位进行计数 ,怎么实现?(求教高手)

xzwsun 2007-11-18 11:00:09
我想统计servlet 收到的请求,收到一个请求就生成一个文件,文件名是 时间(yyyyMMddHHmmss) + 0001 (序号,以秒为单位进行排序)。

例如:20071121231218_0001 20071121231218_0002 .... 20071121231218_0015

20071121231219_0001 20071121231219_0002 .... 20071121231218_0203

问题:

我如何实现 ,每过1秒,就重新计数。还有如果判断这个请求是新的1秒钟收到的。

这两个问题好像是一个问题。由点困惑求教高手
...全文
122 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Norris_Zhang 2007-11-18
  • 打赏
  • 举报
回复
另外在内存中用一个变量来保存可能比在文件中保存更好,因为读写文件的效率很低,可能不能很好的表示访问时间,但要注意用一个触发器保证在服务器关闭时把这个值写进文件,在服务器启动时去读这个值。
Norris_Zhang 2007-11-18
  • 打赏
  • 举报
回复
可以建一个文件保留上一个文件名,然后通过算法算出下一个文件名,再把算出来的下一个文件名写进这个文件,

不过这样会有并发冲突,要把对这个文件的读写代码加同步保护(synchronized)
网络咖啡 2007-11-18
  • 打赏
  • 举报
回复
这样你就要维护一个这样的数值了,比如开一个专门的线程来维护这个值
xzwsun 2007-11-18
  • 打赏
  • 举报
回复
网络咖啡
你好!非常感谢你的帮助。

如果生成的文件一直存在于目录下,或许你的方法是可行的,但对于我的项目要求,生成的文件会被处理掉的。也就是说,我很有可能新生成的文件马上被移走。这样就无法获取最大的序号了。

除此之外,是否还有更好的办法。


我做的是一个压力测试。
网络咖啡 2007-11-18
  • 打赏
  • 举报
回复
逻辑上可以这样实现:
1、在接收到请求以后把当前时间转换为yyyyMMddHHmmss这样的字符串
2、获得目录下以所有的文件名,构造成一个String数组
3、从2的数组中过滤出来所有以当前时间字符串开始的文件名
4、判断3过滤出的内容,如果个数为0,则设置序号为0001,如果个数不为零,则获得这些序号中最大的一个,然后实际生成的序号在最大的序号上加1即可

代码比较多,就不写了
xzwsun 2007-11-18
  • 打赏
  • 举报
回复
关键是时间的准确区分是关键。

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧