现实场景:有一个系统挂在互联网上,用来采集企业的档案,每个档案可以由总局采集,也可以由区县局录入该区县的企业,每个企业档案对应一个主表和二三十张子表组成。问题就出在,有些区县局上不了网,但是也需要录入数据,所以决定把该外网系统采集档案这块业务单提出来做一个单机版系统,表结构和网络版一样,就是把系统移植到tomcat和access数据库环境下,打成一个安装包,给区县局安装采集。至此一个系统被切分成了外网系统和单机版系统两部分,那就产生一个大问题,数据同步,安装好的单机版需要在联网情况下下载用户信息和该区县的企业记录,之后断网随意操作,什么时候想提交公网系统了,连接互联网,提交新档案和旧档案的修改。
问题来了:
上面描述了问题场景,问题就在于数据同步,单机版肯定不能直接拿到互联网系统数据库的连接,所以需要把上传的企业信息取出来,拼成xml传过去,在另一端解xml插入数据库。
我当初第一个想法:服务器端坐一个servlet,客户端用httpUrlConnection往http请求的body写数据给服务器端,但是httpUrlConnection的问题是无法跳过登陆验证,每次访问这个servlet都返回登陆页面。
我改变了想法:自己写一个socket,监听8860端口用于数据同步(我以后不会这么干了,因为监听这个端口完全是我一意孤行,客户很可能只允许开80端口,后来我庆幸不是),我每次电击“下载”,都先往服务器发一个请求并传一个该区县的id,服务器查询企业表将该区县的所有企业id和名称传给客户端,这样客户端可以查看当前哪些企业可以下载,然后点击确认。开始下载,我每个企业下载单独开了一个ajax线程,用xmlhttprequest发送请求给一个servlet这个servlet向远程socket发送请求并得到xml串,解析串插入数据库,返回true给ajax请求,页面上则在该企业名称后面打勾,这样看起来像是一个以企业为单位的伪进度条。
每个请求,在服务器端开启一个线程查询-〉拼串-〉返回,20多张表数据拼成一个巨大的xml串传给客户端,同时这个企业也肯能存有附件,对于附件的处理,我总希望它和其他数据保持一致性,所以我将附件的二进制码用base64编码生成一个字符串拼在一个xml的标签里。
下载过程和上传过程一样刚好相反。
这样做的目的:
1、不是表对表的同步,而是以企业为单位同步,保证数据完整性,不会出现一个企业同步一半的情况。
2、客户端和服务器端同步的表、字段可以随意修改,同步很容易适应表的变化。
3、由于当初不懂serverpush方法,则用每个企业一个请求来实现看似是进度条的东西,加强用户体验。
遇到困境:
1、在第一个版本中,大概有500家企业每个企业9个表的数据,下载流畅。但是后来修改版本,企业4000家,每个企业对应20多张表,在同步到200多的时候发现出现请求莫名其妙中断的情况,考虑可能某一端线程太多导致多余线程没有执行。
2、4000家时候,我在ajax端坐了线程池,查看池里的xmlhttprequest是否状态ready,如果ready就用,如果不存在ready的创建一个新的放入池中,但是执行时候报浏览器脚本缓慢。
我总结过程中犯的错误:
1、不该擅自开新端口监听
2、我该在服务器端也做一个线程池
分享到:
相关推荐
以下是从标题、描述和部分内容中提炼出的C#程序员最常犯的7个错误及其解决方案: 1. **格式化字符串**: C#中的字符串是不可变的,这意味着每次对字符串进行修改都会创建新的对象。例如,通过串联字符串创建SQL...
西门子PLC在运行过程中可能会遇到两种常见的错误,即“IO访问错误”和“区域长度错误”,这些错误通常在用户程序下载后,CPU进入停止模式且STOP和SF指示灯亮起时出现。这些错误主要源于编程不当或硬件配置与程序不...
数据结构在计算机考研大纲中都考哪些内容.docx
EEMD的原理是,即使噪声在每次迭代中都会改变信号的局部特性,但真正的IMF应当在多次运行中保持一致。 **CEEMDAN的进一步改进** CEEMDAN(Complete Ensemble EMD with Adaptive Noise)是对EEMD的进一步升级。在...
"MyQQ的一个作业,请大家给意见" 这个标题表明这是一份关于MYQQ项目的个人作业或作品,作者希望得到他人的评价和建议。MYQQ可能是一个自定义版的QQ软件,或者是与腾讯QQ相关的项目,如客户端应用、小程序、扩展功能...
在易语言中,处理错误信息是一项重要的任务,因为任何程序在运行过程中都可能出现错误,如何有效地获取并处理这些错误信息,是提高程序稳定性和用户体验的关键。 易语言的错误信息处理主要依赖于其内置的错误处理...
在实际应用中,错误日志系统往往支持多个级别,如DEBUG、INFO、WARNING、ERROR和FATAL,这样可以根据错误的严重程度选择记录哪些信息。例如,DEBUG级别的日志可能只在开发环境中使用,而ERROR和FATAL级别的日志则在...
例如,可以将自定义错误处理函数放在测试脚本的开头,以便在整个测试过程中都能捕获错误。同时,使用“Resume”语句可以控制错误处理流程,决定是终止测试还是继续执行。 综上所述,理解并熟练掌握QTP的错误处理...
欧拉算法及其改进形式在许多实际问题中都有应用,如网络路由、电路设计、迷宫求解、数据结构的构建等。通过理解并掌握欧拉算法,我们可以有效地解决那些涉及到路径和环路的问题,这对于理解和设计复杂系统至关重要。...
通过设计制作建筑模型这一活动,学生们不仅学习到了关于建筑稳定性的基础科学知识,而且在这个过程中培养了科学探究能力、团队合作能力、建筑师工作认知、安全意识、批判性思维和持续改进的精神。 首先,建筑稳定性...
Windows操作系统在运行过程中,难免会遇到各种错误,这些错误通常以特定的错误代码形式呈现,对于普通用户来说,这些代码可能难以理解。为了帮助开发者和系统管理员更好地诊断和解决Windows系统中的问题,出现了“VC...
在理解了CMM的基本框架之后,接下来讨论两种具体的软件过程改进方法,它们分别是基于同行评审和测试的软件过程改进方法以及基于CASE工具和文档的软件过程改进方法。 1. **基于同行评审和测试的软件过程改进方法** ...
这意味着现在每个商品在购物车中都会显示其单独的价格总计,这将使用户更清晰地了解他们的订单总额,从而提高购物过程的透明度。这样的功能对于那些销售多种商品,且价格各异的电商网站来说尤为必要。 在提供的...
她通过这些故事传达了一个关键的信息:每个人在成长过程中都会犯错误,面临挫折,但这些都是成长的必经之路,没有什么是过不去的。 接着,她将黑板上的班会主题改为“没关系,我们都是这样长大的”,这一句话成为了...
Windows8 中都有哪些命令?.docx
这种理论在物理学、生物学、社会科学(如管理学和经济学)以及工程科学技术中都有广泛的应用。陆大金编著的《随机过程及其应用》是清华大学出版社出版的,作为一本教材,它结合了作者在清华大学无线电电子学系多年...
检讨书在我们的学习和工作中都可能成为一项必须完成的任务,特别是当我们犯下错误,如与同学发生肢体冲突时。在这一特殊情况下,检讨书不仅是一种认错的形式,更是一种自我反省、表达歉意和承诺改进的工具。从这一...
遗传算法是一个迭代过程,在每次迭代中都保留一组候选解,并按照某种优劣指标进行排序,然后按照某种指标从_TSP-
- **对应关系**:过程流程图、控制计划和PFMEA中的过程编号必须一致,以确保每个步骤在各个文件中都能准确对应,便于审核和检查。 - **编制顺序**:首先绘制过程流程图,接着进行PFMEA分析,根据分析结果制定控制...