• ----:)欢迎访问源码网(:----
    • 首页
    • 博客
    • 学院
    • 下载
    • 论坛
    • 影视
    • 发布源码
    • RSS
    • ITPig
    • 笑话网
    • 百家姓
    • 繁體中文

源码网 - 中国第一源码门户
选择镜像:网通镜像 - 电信主站
  • 首 页
  • 新闻动态
  • 网站运营
  • 网页制作
  • WEB开发
  • 编程开发
  • 图像媒体
  • 操作系统
  • 数据库
  • 服务器
热门搜索 优化 SEO 故事 cms IIS7 MySQL 个人 AdSense 主题推广 | 文章搜索: 高级搜索
会员登录/控制面版您的位置: 学院首页 >> WEB开发 >> ASP开发 >> XML相关 >> 详细内容
 

推荐文章

 
 

热点文章

  • 用XML组件生成静态首页
  • 使用Java Swing 创建一个XML编辑器
  • Google Sitemap ASP生成代码
  • 在JSP、ASP和PHP网站网页中使用XHTML
  • 用XMlhttp生成html页面,
  • 用DHTML来模拟实现下拉菜单
  • 带日期标注的日历控件
  • 使用XML+VBS技术在ASP中实现报表的打印
  • XMLHTTP+Javascript+Asp写的聊天室,无刷新实现
  • 在Web界面下如何生成像资源管理器一样的树形目录
  • 利用XSLT把ADO记录集转换成XML
  • 巧用ASP技术保护DHTML源代码
 
 

相关文章

  • 用ASP生成Chart
  • 使用ASP建立Http组件
  • FileSystemobject组件
  • Dns组件的一些用法
  • chart组件在ASP中的应用
  • Zaks Pop3 参考说明
  • Zaks Pop3 简要介绍
  • ASP Image 使用范例
  • Asp Image 简要介绍
  • ASP HTTP 使用范例
  • Asp HTTP 简要介绍
  • ASP Ping 简要介绍
 
 

百度搜索

 
 

服务器端改XML冲突的解决方法讨论

  • 阅览次数:
  • 文章来源: bbs.dvbbs.net
  • 原文作者: 清香白莲
  • 整理日期: 2006-10-03
  • 发表评论
  • 字体大小:
  • 小
  • 中
  • 大

XML文件不同access,那个access数据库好像有防止更改冲突的机制,但是我们“微小”的微软XMLDom没有给我们准备这个防止冲突!



具体例子:
两人同时调用写入XML文件的asp,结果只有一个人能写进去,另外一个却没有。
这跟XMLDom的工作方法有关。
用XMLDom.load(Path)载入文件之后,文本对象被载入内存,只读属性解除。当两个人同时载入一个XML文件时,XMLDom的内容是一样的。这样问题来了。
例如:
tmp1.XML
<Root></Root>


A君在XMLDom根中插入一个子标签<Chd1>Chd1</Chd1>,B君在XMLDom中又插入一个子标签<Chd2>Chd2</Chd2>。然后两个人保存,现在我们来看两人的XMLDom对象都是什么东西


A:
<Root>
<Chd1>Chd1</Chd1>
</Root>


B:
<Root>
<Chd2>Chd2</Chd2>
</Root>


OK,谁处理的慢,谁就被写进tmp1.XML文件啦。
但是我们想得到的是,两个人增加的东西都写入到XML文件,就是tmp1.XML的结果应该是这样的。


tmp1.XML
<Root>
<Chd1>Chd1</Chd1>
<Chd2>Chd2</Chd2>
</Root>


如何解决这个问题呢?


初步构想:
方法1:利用Application.Lock的特性:在载入XML文件之前,建立一个Application,并且Lock起来,在写入完成之后再Unload。那么,同时执行的asp就会停在Application.Lock那里,等Application重新开放再执行下来,从而达到XML异步写入的目的。具体例子:
tmp1.asp

以下内容为程序代码:
<%
application("XMLFiles1"),Lock
XMLDom.loat(path)
处理过程
XMLDom.save(path)
application("XMLFiles1").unlock
%>

这个好是好,但是有个缺点,如果有10个xml文件就要建立10个application,有10000个就要建立10000个application,天。


方法2:还是利用application,不过这次不同以前:这次只用到一个application,把各个操作请求编号起来,建立一个队列,再把操作请求的编号返回诶客户端。服务器每执行完一个操作就删一个编号,那么队列就一点一点的向前了。客户端根据自己的队列编号,定期刷新一下,要求服务器执行自己的操作。这个代码太复杂了,基本是这样的流程


服务器建立Application -> tmp2.asp用来添加操作编号 -> 返回当前操作的编号给客户端 -> 客户端定期刷新并提交自己的操作编号给tmp3.asp -> tmp3.asp用来做操作XML -> tmp3.asp判断是否轮到该编号,轮到就做,未轮到返回错误信息 -> tmp3.asp做了之后队列前移,删除操作编号


这个方法仅仅占用一个Application(可以对编号进行规则编制,例如[tmp1.XML|1|2|3}[tmp2.XML|1|2|3],其中第一个是xml文件名,后面那些是操作编号,|是间隔符,[]是分割每个文件的标识),但是客户端刷新时间不好定,太小了就占服务器资源太多,太久了队列移动就十分缓慢。


方法3:为每个操作建立一个暂时的xml文件,由服务器在一定时间内归总一次:这个方法对于对时间性需求不大的还可以,可是,对于时间性要求非常高的就不行了。例如论坛。(其实时间性要求不大的话完全不必要顾虑冲突这个问题)

上一篇:MySQL数据库的导入导出 和 Liunx的权限
下一篇:构建支持Master/Slave读写分离的数据库操作类
  • 网友评论:
  • 查看所有评论
  • 我要发表评论
您的网名:
留言主题:
你要发表的内容:

 

关于本站 | 广告联系 | 版权声明 | 网站地图 | 发布软件 | 帮助中心 | 源码论坛

Copyright © 2005-2007 CodePub.Com  程序支持:木翼  滇ICP备05005971号