用手捏爆苹果,爽~~
下面一起看看这样一款简单的小游戏设计都需要怎样的设定。
游戏资源
老板
决定了工厂、车间及流水线的数目
主仓、副仓
提供手套和摄像头资源,各占用1个资源数;资源总数有限,工厂共用
手套
流水线根据额度申请使用,使用后放回工作台;手套可以开启空闲自动退回仓库,默认关闭
工作台
存放流水线上的手套,如果开启了空闲自动退回功能,则手套空闲时间达到设定的时长后会自动退回到仓库
摄像头
监控整个生产过程,只能与一个仓通信
流水线
可与一个或多个仓通信,至少安装一个摄像头,与多仓通信则需要多个摄像头;有的流水线同时只能一个工人工作,有的可以多个,建厂时决定;可以统一配置流水线上手套的最大使用量,提倡节约
苹果
大小不同,苹果越大捏爆用时越长
工人
只能捏同等大小的苹果;默认工人有两只手,可以增加多只手;通常只用一只手工作,可以增加更多的手同时工作,受手套数量的限制,可能多余的手需要排队,轮流使用手套
工作
工人戴手套捏爆苹果,一个苹果只能用一只手,不可换手,每次工作苹果数量不同,通常一次只有一个苹果
游戏流程
MongoDB
项目:工厂
处理特定的一些任务,游戏中捏爆苹果的场所,其它工厂也许就是捏爆榴莲了
请求:工人
每个请求处理特定任务,同类型的工人只捏爆相同大小的苹果
容器:车间
请求自由选择容器,工人自由选择车间
开发者:老板
决定了项目的技术选型,例如请求采用异步还是同步,容器的数量,Worker的数量,线程的数量等
MongoDB:主仓、副仓
集群中的主、重库
Socket:手套、摄像头
连接数,参数maxIdleTime设置一个连接在连接池中保持空闲的最大毫秒数,超时会被删除或者替换,默认值为None(无限制)
连接池:工作台
由参数maxPoolSize和minPoolSize控制连接池最大值和最小值。最大值代表流水线上最多占用手套的数量,最小值代表分配给流水线的最低手套数量,默认为0,即不分配。
Worker:流水线
一个Worker创建一个client,client创建后会与MongoDB服务建立一个Socket连接,如果client使用主重地址,则需要建立两个Socket连接分别与主重库相连;如果在Worker中使用多进程,则每个进程中都需要创建client;对于同步请求,一个Worker只能同时处理一个请求;异步请求则Worker可以同时处理多个请求。对应到游戏中就是流水线是否支持多人同时工作
线程:手
可以同时处理任务,线程数需要控制在合理范围;线程数较大容易造成单请求占用完所有Socket连接;线程池中没有可用Socket则会增加新的Socket连接;如果已经达到maxPoolSize数,则线程会排队;排队的线程可以通过waitQueueMultiple设置单个Socket等待线程的数量,超出最大线程数会抛出ConnectionFailure错误,例如maxPoolSize为100,waitQueueMultiple为10,则流水线可以最多等待1000个线程,第1001个等待线程会报错;参数waitQueueTimeoutMS可以设置等待线程的等待时间,超出等待时间会抛出ConnectionFailure错误
需要注意的是,排队的线程会明确任务,等待超时后相应的任务也会丢失,相当于游戏中排队等待手套的手会通过协议关联一个苹果,如果手超时消失了,苹果也不会被捏爆,整个任务会继续
结语
花两天时间仔细了解了一下Mongo连接数相关的内容。根据自已的理解,转化成一种游戏设定方便记忆。部分细节可能理解的不到位或者不准确,欢迎指教。