1. 交易
1.1 需求
采用拍卖场模式,支持一口价和出价(每次自动提价10%?)
1.2 实现
1.2.1 接口
mina监听指定socket端口
1.2.2 实现
1.2.2.1 添加物品
消息到达后,insert table, 并返回insert结果,消息中包含底价和一口价
1.2.2.2 出价
消息到达后,update table,where字句中应当指定status和price范围(小于一口价)
1.2.2.3 一口价
消息到达后,update table,where字句中应当指定status
1.2.2.4 拍卖到期物品发送
启动一个离线线程,每5分钟(?是否合适)扫描一次数据库,并将到期的拍卖物,调用逻辑服务器接口,mail给指定userid
2. 聊天
2.1 需求
广播:message推送所有逻辑服务器
团队消息:message推送所有团队成员所在的服务器
p2p消息:message推送指定id
2.2 实现
2.2.1 接口
mina监听指定socket端口
2.2.2 实现
2.2.2.1 广播
接到请求后,message转发所有逻辑服务器
2.2.2.2 团队消息
接收到请求后,查询redis中团队成员(最大允许多少人?)所在的逻辑服务器,message转发至团队成员所在的逻辑服务器
2.2.2.3 p2p消息
接收到请求后,查询redis中目标所在的逻辑服务器,message转发至于目标所在的逻辑服务器
3. 战斗
N/A
4. 登录
4.1 需求
login: 将user从上一个逻辑服务器下线,并在指定的逻辑服务器上线
logout:将user从指定的逻辑服务器下线
4.2 实现
4.2.1 接口
提供两个HTTPServlet,LoginServlet, LogoutServlet
4.2.2 login
查询redis中userid上一个逻辑服务器,调用接口将其从此逻辑服务器下线。
并选择合适的的逻辑服务器(负载最少的?or 轮询?)上线,redis中指定逻辑服务器在线人数加1
4.2.3 logout
查询redis中userid当前逻辑服务器,调用接口将其从此逻辑服务器下线,,redis中指定逻辑服务器在线人数减1
5. 服务器状态Servlet
5.1 需求
可以通过此Servlet获取当前服务器状态信息
包括:
服务器连接信息
线程信息
物品发送队列信息
登录统计信息(登录和注销的用户数量,分逻辑服务器在线人数)
上一分钟的请求数量
6. 其他设计
6.1 缓存
reids中key的ttl设置为86400秒
6.2 线程控制
在ServletContextListener中启动所有线程,包括:
逻辑服务器连接守护线程,每个逻辑服务器一个,大世界服务器作为client
拍卖到期物品扫描线程
物品发送线程(与拍卖到期物品扫描线程,通过阻塞队列交互)
配置WatchDog线程,5分钟扫描一次数据库配置,包括逻辑服务器地址