这是为我们网站解决南北电信网通互联互通问题而写的一个程序。
优游中国(www.yooyocn.com)是一个大型旅游门户网站,提供了资讯,视频,图片,博客,论坛等大数据量的业务内容。
为了使全国各地的网友都能够快速访问我们的网站,我们部署了三台服务器,一台双线主服务器,一台网通专线服务器,一台电信专线服务器。通过智能DNS解析,使网通的用户访问网通服务器,电信用户访问电信服务器。
而双线位于我们所在的城市,仅供我们网站编辑人员使用。因为我们的现状,双线就是双慢。所以,只只我们的编辑人员操作它上面的内容管理系统(CMS),把资讯,视频,图片上传到这台服务器上。然后,需要一个方法把双线主服务上新增加或修改的内容分发(也就是复制)到网通和电信的服务器,使网通电信用户都能看到同样的内容。
这就出来两个问题,一是同步,是增量同步,二是实时。
我花了很多时间寻找满足需求的工具。我记得在两年以前,镜像服务器应该是一个热门话题吧。这样的工具应该不少。但出乎意料,都是一些定时全部复制的软件。没有说是网站增加修改文件了,马上就可以同步到其它服务器上。例如,当初很流行的Update Now! ,2000年的东西,至今还有很多人在用。CuteFTP 8的文件同步功能,最少是每天运行一次,并且是遍历所有文件后把不同的文件FTP过去。
晚上和朋友郁闷地谈起这个事,他主要是做WinForm的,立马说.NET里有文件监控的类。可以实时获取增加或变更的文件。我大笑,好啊,正发愁呢!.NET的FTP类也很强,那就不如自己搞!第二天花一个上午,研究FileSystemWatcher。下午出个了DEMO,果然很强,就决定做。实现流程代码量并不多,一天半时间就搞定了,剩下三天都在解决其中的各种问题。在服务器上运行时,问题一个一个出现,被自以为完美地解决,高兴一会后,发现有更棘手问题出现…
程序主要实现了如下功能:
通过FileSystemWatcher实时监控指定的文件夹,取得文件夹下增加或修改的文件名,通过“NotifyFilters.Size”属性实现。它有很多属性,LastAccess,LastWrite,测试时把我搞得很糊涂,往这个文件夹下粘贴一个文件,会引发好几次这个事件。查了好久才明白,COPY操作确实是这样。但具体为啥,MSDN上也没说清。好在服务器上运行时没出现这个现象,也放过了。
捕获文件名后没有立即FTP,把文件信息放在了XML中,FTP从XML文件中读取文件名并上传,上传成功的信息移到另外的XML中。以上过程中的出现的异常也放在日志XML中。这个处理流程,也是我花了一晚上才想起来的。
所以,这个程序代码主要有三大块,一是监控,二是读写XML,三是FTP。
实现这些功能的代码并不多,不复杂,但我的收获不是程序本身,而是又一次体会到了编码时的快乐和乐趣。
在写这个程序时,参考了很多资料,很多网友写的代码。所以,当我也做出一些东西时,我把它开源出来,希望能让更多的人受益。
最后,这个程序到现在为止,虽然能运行,但它并未真正部署。因为,我们选择了更好的服务器架构解决方案,具体请看我的另一篇文章。
另外,这个程序还有很多遗憾没有解决,希望能够以此抛砖引玉,更多的人,做出更优秀的程序。
源码下载:/Files/xtigmh/FileSystemWatcher200801141016.rar
本博客Android APP 下载 |
![]() |
支持我们就给我们点打赏 |
![]() |
支付宝打赏 支付宝扫一扫二维码 |
![]() |
微信打赏 微信扫一扫二维码 |
![]() |
如果想下次快速找到我,记得点下面的关注哦!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!