结对编程作业服务器端系统设计、玩法和接口简要

本文介绍了一种针对十三水游戏的服务端设计方案,通过解耦合开局与结算流程,解决了实时性和性能问题。客户端可连续开局出牌,服务端按需结算,支持AI玩家。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Notice

写得乱得一比,将在脑子清醒的时候重构

文档

API文档

文档可以看这里,正常情况的文档已基本稳定,异常情况的文档还没写
如有问题,可以留言或CC我

整体设计

客户端服务端采用HTTP请求的方式进行交互,客户端可以通过开局接口开局或加入并抽牌,并通过出牌提交接口出牌,然后本局等待结算。客户端可以立即开下一局。

设计考虑

原考虑和存在的问题

原本我是考虑设计一个实时进行牌局的对战平台,凑够四个人开局,发牌,2秒(或其他考虑RTT的合理时间)内出牌,然后服务端判牌,结算,整个过程实时进行,大家同步。

但是这样存在一些问题。首先就是凑够四个人开局,由于结对,我们的用户基数只有六十几个,让大家在同一时间一起运行客户端,是不太现实的。其次,实时传输和结算会给服务器带来很大压力。而且这样也不方便测试和Debug。其中最主要的还是大家的上线时间的问题。

当前考虑

考虑到福建十三水一局游戏中每个人出牌只依赖于他所拿到的牌,且他看不到别人拿到的牌,直到结算。这样,当一个客户请求开局时,服务端可以先寻找他可以加入的战局,找不到则创建,发牌,拿到出牌,保存。直到这局凑够人数进行结算。客户也可以一直开局,一直出牌,符合AI的能力。

这样,将两个过程解耦合,不但可以解决实时性的问题,还能在一定程度上解决性能问题。判牌和结算逻辑可以抽离出去,可以设计成在本局最后一个玩家出牌时运行,也可以设计成周期性运行,还可以通过消息队列或其他"Fire and Forget"连接。由于我们的服务端不可避免的需要经常重启,这样的设计也可以解决脏数据(半完成的宏观事务)的处理问题。妙啊

玩法

玩家客户端登录后,可以不断请求开局接口,然后提交出牌,这些出牌会被记录并在合适的时候结算。客户端可以获取战局历史和历史详情,并通过这些数据在图形界面上回放牌局。详见API文档。
(这里会补一些图)

FAQ(Maybe)

认证问题

认证使用session机制和Header域的方式,API文档里带有Authorization这一节的接口均需要认证。认证的方法是在请求的HTTP头部添加一个名为X-Auth-Token的字段,值为登录接口返回的对象中的token字段的值,或者响应头中X-Auth-Token字段的值。

开局数量问题

为避免未完成的牌局过多,同时考虑服务器的并发压力,限制每个玩家未完成牌局数量。如未完成牌局过多,会被拒绝开新的局,但仍然能加入战局。也就是说,当你未完成牌局已达上限,且没有其他你可以加入的牌局的时候,开局接口失败。

PSP

PSP2.1Personal Software Process Stages预估耗时(分钟)实际耗时(分钟)
Planning计划4040
Estimate估计这个任务需要多少时间4040
Development开发4051070
Analysis需求分析(包括学习新技术)7560
Design Spec生成设计文档60120
Design Review设计复审60200
Coding Standard代码规范(为开发制定合适的规范)60120
Design具体设计120210
Coding具体编码0180
Code Review代码复审060
Test测试(自我测试,修改,提交修改)30120
Reporting报告7080
Test Report测试报告2020
Size Measurement计算工作量1010
Postmortem & Process Improvement Plan事后总结并提出过程改进计划4050
合计5151190

转载于:https://www.cnblogs.com/rtxux/p/11578507.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值