基于Java Web分析外设适配方案设计路径
2023-05-29李万波
李万波
(中国电视报社 北京市 100038)
本次研究中,相关工作人员基于Java Web 应用程序使用外设时,由于不同类型的外设具有不同的接口和协议,因此可能会出现兼容性问题。为了克服这些问题,需要设计合适的外设适配方案,将不同类型的外设与Java Web 应用程序进行无缝集成,从而实现数据的有效采集和处理。基于这样的背景和需求,Java Web 分析外设适配方案设计应运而生。该方案旨在解决外设兼容性问题,提高数据处理和分析效率,进一步完善和丰富Java Web 应用程序的功能,从而满足用户不断增长的需求。
1 接口适配解决方案
1.1 接口规范化
接口规范化可以让不同供应商提供的不同硬件或软件模块之间容易互操作。这些模块可能形成系统的不同层次或模块。在Java Web 技术的外设接口适配过程中,接口规范化涉及以下内容:
1.1.1 接口协议的制定
在设计适配方案时,需要定义合适的接口协议,该协议规定了不同组件之间的数据传输方式、协议规定的值类型、速率以及其他相对应的细节[1]。
1.1.2 接口格式的规范化
为了实现方便的接口,一般采用数据格式内部标准化,比如XML,JSON 等格式,这样可以让不同的硬件或软件模块使用同一个数据结构交换数据并进行信息处理。
1.1.3 接口文档的编写
为了更好地管理接口,必须编写相关的接口文档,文档中记录了接口的具体功能、调用方式以及错误处理等信息,并且需要注意对接口文档进行更新和维护。
1.2 方案库引入
方案库可以帮助项目团队进行更高效的开发和更准确的数据处理。基于方案库能够提供大量处理方案和数据结构,以及相关代码等资源,并使得开发者能快速找到类似问题的已有解决方案,从而节约代码开发时间,降低成本,并提高整个系统的稳定性和可靠性。
1.2.1 确定方案库引入目的
在项目设计之初,需要针对项目需求确定方案库引入的目的。这样可以更好地选择所需的方案库,为项目的顺利运行做出决策[2]。
1.2.2 选择合适的方案库
根据项目的实际需求,选择适应需求的方案库。不同的方案库有各自特色、优势和限制。在选择方案库时需要根据项目的实际情况和需求,综合考虑各种因素进行选择。
1.2.3 模块化开发
本次研究中,相关工作人员以MVC 框架作为基础进行模块设计与开发工作。MVC 模式常用于构建各种应用程序。MVC 模式的核心思想是将应用程序的不同功能分为三个独立的部件:模型、视图和控制器,并通过它们之间的协作来实现该应用程序的功能(如图1 所示)。
图1:MVC 框架图
1.3 接口适配整合
整合过程一般包括识别、抽象、对齐以及集中化等步骤。通过整合不同型号、不同供应商提供的设备可以减少因应用程序升级而导致的硬件更新成本,在后期的维护工作中也具有极其重要的作用。
研究人员针对每一种设备或者相应类别的增加设备样式计划(设备置换部署),编写数据获取以及数据处理协议的可扩展框架,指定处理异常机制以及错误的提示方式。对整个系统工作情况进行监控跟进,实现对应函数库(例如DLL)与不同的硬件交互调用,并选择设备进行串行或者并行的处理(如图2 所示)。
图2:适配方案数据流程图
2 外设适配方案设计
2.1 构建方案库管理的表结构
方案库管理系统能够帮助使用者管理各种应用场景下的设备使用方案,并对方案进行合理规划和分类组织。为了有效实现方案库管理,研究人员需要构建相应的管理表结构。
2.1.1 确定基础数据表
首先需要确定方案库管理所需的基础数据表,包括设备信息表、方案信息表、参数配置表等。例如:设备信息表包含该设备的型号、制造商、通讯协议等信息;方案信息表包含方案名称、方案描述、所属设备类型等信息;参数配置表则包含与某种设备的特定功能相关的参数配置信息[4]。
2.1.2 设计关联关系
在已有基础数据表的基础上,需要设计各个数据表之间的关联关系,从而更好地组织各种方案。例如:将设备信息表中的设备类型与方案信息表中的设备类型进行对应,以便确定可选方案信息;通过参数配置表与设备信息表进行关联,以便确定方案应用于哪种具体的硬件设备。
2.1.3 优化数据存储
根据方案库管理需求,对表结构进行优化,比如输入信息增加了一些特性,可以考虑将数据拆分到不同的表中。方案存储时可以尝试使用二进制结果集(Blob/Clob),这种方式可以仅为保存一个文件而进行操作,避免数据解码时出错和提高效率。
2.2 方案库前端设计
研究人员在设计方案库前端过程中,需要分清业务需求和用户体验感受,以最优化的方式设计各种界面、控件和交互方式。
方案库前端页面示意图如图3 所示。
图3:方案库前端页面示意图
2.2.1 界面设计
设计人员根据方案库管理的实际需求确定所需要的主页面、子页面、表单等界面元素,并且筛选可用的UI 组件,如按钮、菜单、列表等组件。确定UI 风格以及系统配色情况,以保证初次体验时系统呈现出统一良好的界面外观。
2.2.2 交互方式设计
设计人员根据方案库管理所涉及的功能,确定相应的用户操作流程和交互方式。需要考虑易用性、高效性、一致性和规范性等多重要素,如可以使用弹窗和模态框等组件提升交互体验和注意事项展示以便于用户更好的清楚了解当前的处理进度状态[5]。
2.2.3 数据展示
方案库管理功能需要用户查看和编辑的一些数据,这些数据需要以列表、表格等形式呈现给用户。数据分页,搜素、时间区间等更多的查询条件可以提高用户搜索数据的效率,保证系统性能。同时拥有重要的业务操作比如用户添加、修改、删除,应该非常显眼并设置切实可行的按钮操作。
2.3 基于NIO与TCP协议的数据传输
目前常见的Java NIO 框架包括Netty 以及Apache两种,这两种Java NIO 框架与高性能网络均具有良好的适应性。因此,研究人员对二者进行横向对比,挑选更为适宜的Java NIO 框架。本次研究中,工作人员使用Netty 以及MINA 创建基于Java NIO 的独立EchoServer,通过实验观察两种框架的大小不同的网络报文条件下的性能表现。其测试结果如表1、表2。
表1:MINA 测试结果
表2:Netty 测试结果
研究人员通过分析MINA 和Netty 的源码得出,两个框架在处理IO 读事件时buあer 分配策略上存在差异。由于网络IO 处理中socket API 每次从TCP buあer 读取的字节数是不稳定的,因此NIO 框架在处理每个读事件时需要动态分配一个buあer 来临时存放读到的字节,而buあer 分配效能是影响网络IO 框架程序性能表现的关键因素。本次测试中,虽然Netty 的TPS 更高,但其CPU消耗明显高于MINA。结合以上多方面比较与考虑,最终选择了Apache MINA 框架。
2.4 动态调用DLL函数
动态调用DLL 函数使得程序模块的功能复用性有了很大的提高,方便二次开发和程序优化,但同时也会增加程序可读性、可移植性和灵活性等方面的挑战。
2.4.1 加载DLL
在C/C++语言中,使用LoadLibrary 函数可加载指定名称的DLL。这个函数接收一个字符串类型的参数,代表需要加载的DLL 的路径、名称以及扩展名等信息。LoadLibrary 返回一个模块句柄HMODULE 作为加载该DLL 后的唯一标识符,如果返回NULL 则表示加载失败。例如:
2.4.2 获取DLL 函数地址
获取DLL 函数地址的方法需要结合GetProcAddress函数和LoadLibrary 函数。先用LoadLibrary 加载所需的DLL,然后再依据对应函数名称,通过GetProcAddress函数得到该函数入口点在内存中的地址,即可对该DLL中的函数直接调用。例如:
该案例中,研究人员先定义一个函数指针MY_PROC 作为函数调用的接口,然后使用GetProcAddress函数获取DLL 中函数fnAdd 的入口地址,并将其转化为MY_PROC 类型的函数指针pFnAdd。此时就可以通过pFnAdd 实现对DLL 中函数的直接调用。
3 结语
本次研究中,相关工作人员在设计方案库模块时,着重设计了表结构、业务处理和前端UI;在数据传输部分,通过对“MINA”和“Netty”的测试分析,并详细讲解了MINA 的原理和构造,并基于该框架设计了TCP 的Server 端和Client 端;在DLL 调用部分,介绍了JNative 的使用方法,并以D3 为例详细设计了DLL函数的调用过程;最后,对旧的外设连接方法与新方案进行了对比分析,得出新方案在实际应用中更优越的结论。