想编写一个小小的在线游戏,但是发现用编写web server的思路编写game server完全行不通,比如我目前想到了以下几个比较幼稚的问题需要解决:
• game server是不是比web server更高并发?
• 如何做反作弊?纸牌游戏还好,每一步都可以交给服务器处理和校验。但是实时性高的在线射击游戏哪些逻辑会放在客户端,哪些放在服务器,如何实现反作弊?杜绝反作弊是不是永远都不可能的?为什么?
• http协议是不是已经不适用于游戏通信了?个人猜测是因为TCP协议要求可靠导致通信时间过长?那一般使用什么协议进行通信?这类协议的特征是什么?网页游戏有没有什么好的解决办法?websocket效率如何?
• 例如我要实现多房间同时进行游戏,那我应该如何做?目前有两个想法,选择一是有多少个房间就运行多少个实例,但如何分配实例与线程资源的关系?二是可不可以有一个或几个总控,根据输入的数据处理后返回,逻辑在这里,数据在别处,类似于单例模式
最后,有没有这方面的文章和书籍可以参考?
多谢各位啦
1
bjtugun 2015-04-01 16:58:45 +08:00 2
1. web server比game server更高并发。但是game要求的连续实时性比较高,希望延时稳定的保持在100ms以下。这个延时不仅仅指网络延时,包含输入到反馈的逻辑延时。
不同游戏类型对实时性有不同要求,节奏慢的游戏延时可以放宽到200-400ms,但是要稳定不要剧烈波动。 1. 理论上,所有涉及属性、财富和判定的操作都应该由服务器处理。但是实际情况为了手感会有种种妥协,比如客户端预算,或者信任客户端再校验。手游因为网络环境的不确定性会有更多妥协。 反外挂:通信加密,客户端加壳,客户端内关键变量加密,游戏设计增加外挂获利成本。但是只要你的游戏够火,你就不可能杜绝外挂。 1. 根据游戏类型决定协议。卡牌游戏用HTTP没什么,一个FPS当然用TCP长连接发二进制报文了。 1. 一个进程可以承载多个房间,设计好可以水平扩展的结构就行了。这个是结构问题,各种设计大同小异的。 |
2
hh54188 OP @bjtugun ,非常感谢你的回答,对我有很大的帮助
顺便也去你的博客看了一看,感觉很可惜的是你回老家工作了,如果你还在北京的话可以出来交流一下 也了解到你有寻求remote job的需求,建议可以去一些国外的网站上找找,至少在web这块还有很多Freelance的需求的,比如http://jobs.smashingmagazine.com/freelance |
3
aaaa007cn 2015-04-01 21:16:32 +08:00
|
4
ryd994 2015-04-01 21:41:04 +08:00 via Android
反作弊不一定就要实时验证啊,抽样记录,有空再审查,对老账号信任不验证,都是可以的
|