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

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 【[color=red]如将EC字段当SEQ使用,则可支持异步长连接模式[/color]】

(一)功能性需求:(共50分)
1)定义DAL客户端的interface接口类。(5分)
2)实现[color=red]通用TCP连接池[/color]管理,包括链路数控制、自动重连控制,链路状态检测和维护等。(10分)
3)实现两个Dalet测试服务,并部署在DalServer中用于测试。(5分)
[u]3.1)服务有效性验证:无需认证身份即可访问(Dalet4TestNoAuth)[/u]
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类型
[u]GET http://localhost:8080/dal/testnoauth.xml?METHOD=POST (同上,仅针对HTTP协议,执行POST操作)[/u]
GET http://localhost:8080/dal/testnoauth/fcode.xml 执行doSelect()返回Map<String,String>类型
PUT http://localhost:8080/dal/testnoauth/fcode.xml 执行doUpdate()返回Boolean类型
[u]GET http://localhost:8080/dal/testnoauth/fcode.xml?METHOD=PUT (同上,仅针对HTTP协议,执行PUT操作)[/u]
DELETE http://localhost:8080/dal/testnoauth/fcode.xml 执行doDelete()返回Integer类型
[u]GET http://localhost:8080/dal/testnoauth/fcode.xml?METHOD=DELETE (同上,仅针对HTTP协议,执行DELETE操作)[/u]
[u]3.2)服务有效性验证:需要认证身份才能访问(Dalet4TestAuth:假设用户lius的密码为liuspwd,允许访问Dalet4TestAuth服务。也可定义其他用户。)[/u]
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>对象。[color=red]包体必须包含URI和METHOD两项内容,前者为资源uri确定的path路径,后者为操作方法,如GET、PUT、POST、DELETE等[/color]。
响应包体可能是序列化的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[]类型。【[u]客户端用gson无法解析List<Map>等复杂对象,可以用Jackson包来解析。[/u]】

补充:服务端支持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}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值