欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

UMP编程比赛:封装TCP连接池和DAL客户端接口库。(7.27更新)

程序员文章站 2022-06-14 16:14:44
...
UMP编程比赛:封装TCP连接池和DAL客户端接口库。(更新)
题目:封装TCP连接池和DAL客户端接口库。(共100分)
链接:http://nikeliu.goodluckwith.us/wp/archives/254
链接:http://zeroliu.iteye.com/admin/blogs/1596159
参考:\\10.10.38.134\common\53-MPSP框架库\ 目录,『umpay_bs3_v4.1531.110818-demo.jar』中dal部分Dalet4Test和DalClientsTest2等测试及样例代码。
参考:\\10.10.38.134\common\53-MPSP框架库\ 目录,『bs4dal-run-0719.zip』文件,针对win32服务端运行包。(建议jdk6环境)
参考:\\10.10.38.134\common\53-MPSP框架库\ 目录,『bs4dal_run_0727.tar.gz』文件,针对win32/linux的服务端运行包。(建议jdk6环境)
更新:\\10.10.38.134\common\53-MPSP框架库\umpay_bs3_v4.1990.120821.jar 【如将EC字段当SEQ使用,则可支持异步长连接模式

(一)功能性需求:(共50分)
1)定义DAL客户端的interface接口类。(5分)
2)实现通用TCP连接池管理,包括链路数控制、自动重连控制,链路状态检测和维护等。(10分)
3)实现两个Dalet测试服务,并部署在DalServer中用于测试。(5分)
3.1)服务有效性验证:无需认证身份即可访问(Dalet4TestNoAuth)
GET http://localhost:8080/dal/testnoauth.xml 执行doList()返回List<String>类型
GET http://localhost:8080/dal/testnoauth.txt 执行doList()返回List<String>类型
POST http://localhost:8080/dal/testnoauth.xml 执行doCreate()返回Boolean类型
GET http://localhost:8080/dal/testnoauth.xml?METHOD=POST (同上,仅针对HTTP协议,执行POST操作)
GET http://localhost:8080/dal/testnoauth/fcode.xml 执行doSelect()返回Map<String,String>类型
PUT http://localhost:8080/dal/testnoauth/fcode.xml 执行doUpdate()返回Boolean类型
GET http://localhost:8080/dal/testnoauth/fcode.xml?METHOD=PUT (同上,仅针对HTTP协议,执行PUT操作)
DELETE http://localhost:8080/dal/testnoauth/fcode.xml 执行doDelete()返回Integer类型
GET http://localhost:8080/dal/testnoauth/fcode.xml?METHOD=DELETE (同上,仅针对HTTP协议,执行DELETE操作)
3.2)服务有效性验证:需要认证身份才能访问(Dalet4TestAuth:假设用户lius的密码为liuspwd,允许访问Dalet4TestAuth服务。也可定义其他用户。)
GET http://localhost:8080/dal/testauth.xml?Auth-Path=/dal/auth/lius.xml?nonce=123&Auth-From=127.0.0.1&Auth-Value=47A8E037277997B232E262E106CA2477  执行doList()返回List<String>类型
3)通过CM20协议访问DAL服务,无身份认证信息(参考附录1:报文协议CM20定义)。(5分)
4)通过CM20协议访问DAL服务,含身份认证信息(参考附录2:DAL认证算法定义)(10分)
5)完成客户端接口性能自测(输出类似apache/ab的测试指标)(15分)

(二)功非功能性需求:(共50分)
1)(10分)易用性,可配置,易测试。
2)(10分)安全性,健壮性(如,身份认证、IP校验、防重放攻击等)
3)(10分)高可用,高可靠
4)(10分)高性能,易扩展(如,支持多IP负载均衡)
5)(10分)多功能,易扩展(如,连接池支持其它协议)

(三)功其它要求:
1)依赖较少,尽量独立。(尽量少使用BS3中相关类)
2)不限编程语言。(可使用Java,C,C++,PHP,Ruby,Python等)
3)不限模式(推或拉)。
4)不限BIO或NIO模式。

(四)功评分标准:
采用专家评审方式,由至少5个专家,分别对功能性需求和非功能需求实现情况打分,总分100分,取平均值。

(附录1)报文协议CM20定义,为固定包头加不定长包体模式。
包头字段均为定长字符串类型。
请求包体为一个序列化的Map<String,String>对象。包体必须包含URI和METHOD两项内容,前者为资源uri确定的path路径,后者为操作方法,如GET、PUT、POST、DELETE等
响应包体可能是序列化的List,Map,Boolean,Integer等任意对象。
VER Char(4) 【=CM20】
FMT Char(4) 【=JAVA|J2GZ|GSON|...】
EC Char(2) 【=00】
CS Char(2) 【=GB】
LEN Char(8) 【报文总长度,含包头20字节】
BODY Byte[] 【序列化的任意数据对象,长度=(LEN-20)】

补充:具体序列化算法有多种,根据包头的FMT来定义。
FMT=JAVA时,直接使用Java自带的序列化方式,将整个对象序列化为byte[]类型。
FMT=J2GZ时,直接使用Java自带的序列化方式,将整个对象序列化为byte[]类型后,再做gzip压缩处理。
FMT=GSON时,采用Google定制的gson-1.4.jar库,将整个对象序列化一个JSON文本,在转为byte[]类型。【客户端用gson无法解析List<Map>等复杂对象,可以用Jackson包来解析。

补充:服务端支持4种字符集,客户端至少需要支持GB,也可都支持。
CS=GB {GB2312,GBK,GB18030}
CS=U1 {UTF-8}
CS=U2 {UTF-16LE}
CS=B5 {BIG5}

补充:
链路检测报文(心跳报文):请求:FMT=NULL(无操作),LEN=20(无包体)。响应和请求相同。
链路检测报文(心跳报文):CM20NULL00GB00000020,CM20NULL22GB00000020,CM20NULL33GB00000020,CM20NULL99GB00000020

(附录2)DAL认证算法定义。
认证参数名:Auth-Path,Auth-From,Auth-Value,Auth-Nonce
认证算法一:Auth-Value = bcd(md5(Auth-Path|pass|Auth-From|Auth-Nonce))
认证算法二:Auth-Value = bcd(md5(Auth-Path?nonce=x|pass|Auth-From|null))
补充:Auth-From支持多IP地址,用逗号分隔
例子:假设用户lius的密码为liuspwd
- 认证算法1原始数据 = /dal/auth/lius.xml|liuspwd|127.0.0.1|123
- 认证算法1相关参数 = {Auth-Path=/dal/auth/lius.xml, Auth-Nonce=123, Auth-From=127.0.0.1, Auth-Value=2D16B05EEFBBFCD59BEF15489091C31F}
- 认证算法2原始数据 = /dal/auth/lius.xml?nonce=123|liuspwd|127.0.0.1|null
- 认证算法2相关参数 = {Auth-Path=/dal/auth/lius.xml?nonce=123, Auth-From=127.0.0.1, Auth-Value=47A8E037277997B232E262E106CA2477}