编写 web Server 与 game server 有什么区别?有什么要注意的地方

2015-04-01 14:41:45 +08:00
 hh54188

想编写一个小小的在线游戏,但是发现用编写web server的思路编写game server完全行不通,比如我目前想到了以下几个比较幼稚的问题需要解决:

• game server是不是比web server更高并发?
• 如何做反作弊?纸牌游戏还好,每一步都可以交给服务器处理和校验。但是实时性高的在线射击游戏哪些逻辑会放在客户端,哪些放在服务器,如何实现反作弊?杜绝反作弊是不是永远都不可能的?为什么?
• http协议是不是已经不适用于游戏通信了?个人猜测是因为TCP协议要求可靠导致通信时间过长?那一般使用什么协议进行通信?这类协议的特征是什么?网页游戏有没有什么好的解决办法?websocket效率如何?
• 例如我要实现多房间同时进行游戏,那我应该如何做?目前有两个想法,选择一是有多少个房间就运行多少个实例,但如何分配实例与线程资源的关系?二是可不可以有一个或几个总控,根据输入的数据处理后返回,逻辑在这里,数据在别处,类似于单例模式

最后,有没有这方面的文章和书籍可以参考?
多谢各位啦

2595 次点击
所在节点    问与答
5 条回复
bjtugun
2015-04-01 16:58:45 +08:00
1. web server比game server更高并发。但是game要求的连续实时性比较高,希望延时稳定的保持在100ms以下。这个延时不仅仅指网络延时,包含输入到反馈的逻辑延时。

不同游戏类型对实时性有不同要求,节奏慢的游戏延时可以放宽到200-400ms,但是要稳定不要剧烈波动。

1. 理论上,所有涉及属性、财富和判定的操作都应该由服务器处理。但是实际情况为了手感会有种种妥协,比如客户端预算,或者信任客户端再校验。手游因为网络环境的不确定性会有更多妥协。

反外挂:通信加密,客户端加壳,客户端内关键变量加密,游戏设计增加外挂获利成本。但是只要你的游戏够火,你就不可能杜绝外挂。

1. 根据游戏类型决定协议。卡牌游戏用HTTP没什么,一个FPS当然用TCP长连接发二进制报文了。

1. 一个进程可以承载多个房间,设计好可以水平扩展的结构就行了。这个是结构问题,各种设计大同小异的。
hh54188
2015-04-01 18:02:32 +08:00
@bjtugun ,非常感谢你的回答,对我有很大的帮助
顺便也去你的博客看了一看,感觉很可惜的是你回老家工作了,如果你还在北京的话可以出来交流一下
也了解到你有寻求remote job的需求,建议可以去一些国外的网站上找找,至少在web这块还有很多Freelance的需求的,比如http://jobs.smashingmagazine.com/freelance
aaaa007cn
2015-04-01 21:16:32 +08:00
http://mienfield.com/
一年前流行了一阵子的在线多人扫雷
就是用的 websocket 和服务器实时通信
ryd994
2015-04-01 21:41:04 +08:00
反作弊不一定就要实时验证啊,抽样记录,有空再审查,对老账号信任不验证,都是可以的
bjtugun
2015-04-02 09:28:51 +08:00
@hh54188 感谢推荐,看来还是web方面的机会比较多啊

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/180854

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX