为什么多数c 游戏服务端端是用 C++ 来写

2013年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第七
2013年6月 Linux/Unix社区大版内专家分月排行榜第二2013年5月 Linux/Unix社区大版内专家分月排行榜第二2013年3月 Linux/Unix社区大版内专家分月排行榜第二2013年1月 Linux/Unix社区大版内专家分月排行榜第二2012年12月 Linux/Unix社区大版内专家分月排行榜第二2012年8月 Linux/Unix社区大版内专家分月排行榜第二2011年12月 Linux/Unix社区大版内专家分月排行榜第二2011年10月 C/C++大版内专家分月排行榜第二2011年10月 Linux/Unix社区大版内专家分月排行榜第二
2012年6月 C/C++大版内专家分月排行榜第三2012年6月 PHP大版内专家分月排行榜第三2012年5月 C/C++大版内专家分月排行榜第三2012年3月 Linux/Unix社区大版内专家分月排行榜第三2012年2月 Linux/Unix社区大版内专家分月排行榜第三2011年11月 C/C++大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。为什么多数游戏服务端是用 C++ 来写呢, - 北京理工大学 - 青稞沙龙青春版 -
论坛 - 中国数字科技馆
&& 科普论坛
帖子181&经验1195 &积分1195 &最后登录&
国内游戏开发绕来绕去还是脚本+C+erlang+go,难道大家就不会其他东西了么?大部分可以的情况下,除了非用C/C++,我推荐各位认真考虑下 java,这个性能上最接近C的东西,能承当大部分cpu密集型事务,却又不会象c那样 crash了找都找不到问题在哪里。同时面向高并发时基于原生jvm的 scala可以提供类似 erlang的简单方式,函数式编程 & 大规模并发协程 & actor;同时 java可以很方便的同 javascript结合,js的速度应该是动态语言里面最快的吧。再者 java还有 groovy,可以提供 python/ruby的泛型编程,用超高的开发效率和 python/ruby媲美,同时还能和 scala 结合实现高并发。最重要的是写 java好招聘,到处都是写 java的工程师,大部分语言级的培训都可以省略了。
帖子181&经验1195 &积分1195 &最后登录&
国内游戏开发者很多拒绝学习 java,因为很多开发者自己是碰都没碰过。现在拒绝 java的人,大部分只是在游戏圈子里面打转的人,偶尔开发下 web,缺乏其他行业和领域的经验。看看除游戏外,当今多少世界级的开源服务器是用 java开发的?游戏就真有那么特殊么?我看不是,国外大把java开发的游戏服务端,各位如果知道游戏服务端领域有啥 java技术栈解决不了的事情,麻烦告诉我一声。再看看java上下游的 scala, javascript, groovy这些东西。所以建议各位,有空有条件的情况下,认真考虑下 java技术栈,世界很大,不是只有游戏;即便游戏,现在的开发方法真的对吗?
帖子181&经验1195 &积分1195 &最后登录&
以下是另一种说法
帖子181&经验1195 &积分1195 &最后登录&
为什么都用C++做游戏服务端?
因为用C++做游戏服务端简单。
这里说的简单,并不是指C++这门语言简单,而是说,对于游戏服务端开发来说,你用C++来做,可以在领域知识积累的不够多的情况下,也能做出一款在线数量能满足上面要求的服务端框架。
十年前,游戏刚成为朝阳产业的时候,网上流传C++实现的游戏服务端框架的趋势逐渐盖过老的mud游戏用的那种单点lpc,大部分都是一个IO线程一个逻辑线程裸跑,客户端直连各种GameServer/SceneServer/ZoneServer(都只是逻辑服务器的代号而已),后端再接个。
试想,如果你的程序员只会这样一种简单架构,那是不是唯一能往上跑性能的点只在这个语言的效率本身了?
帖子181&经验1195 &积分1195 &最后登录&
那为什么不能用C++来写游戏服务端?
先定义下什么叫游戏服务端。
网络IO层不应该算游戏服务端。一般目前现存的、服务端代码中有C++的团队,所谓的用C++,用的最多的地方其实就是网络层。但是一个网络层用C++,其他的逻辑部分用C++去驱动脚本,这种算不算C++开发的游戏服务端呢?
我觉得不算,mono的网络层也用C++,但是我上层可以用C#,可以用F#。
各种虚拟机的runtime里面,网络层也都要么是C要么是C++,但是我上层用的是其他语言并不是C++。
这样来看,我用其他语言写逻辑+C++写网络层和部分底层,性能上跟专业团队维护的runtime会有本质区别吗?至少在性能上并不是数量级的区别。
帖子181&经验1195 &积分1195 &最后登录&
那用C++来写服务端会有什么弊端呢?
用C++写逻辑简直是反人类,实现同样一个功能代码量多N倍。
C++逻辑出了bug就是能core掉你一组服务器的bug。项目团队大了+再牛逼的人也会有脑抽的时候,线上服务器随时都有core掉的风险。
早期端游没多少的时候,是卖方市场,你的游戏挂了我玩家就没其他游戏可玩了。后来端游是买方市场,你的游戏挂了我只要付出成本没多少我一个不爽就换另一款跟你品质差不多的游戏去了。所以热更新已经成为大厂端游标配。纯C++服务端怎么热更新?所以你会听说到/看到腾讯大批老的纯C++写服务端的页游、端游热更新的唯一办法是快速重启。
帖子181&经验1195 &积分1195 &最后登录&
还有一点是高票答案比较扯淡的,所谓游戏是极度压榨硬件性能的。
这个对于端游来说,客户端部分确实是,但服务端并不是。
正是因为受限于客户端,所以你服务端做单节点上万人是没有意义的,同屏了才有强交互的强烈需求,不同屏的话我干嘛自己找罪受?
现在不是十年前了,分布式洗礼游戏行业也已经不是一年两年了。把时间花在节点拆分上的回报率远高于花在单节点在线上。IO线程和逻辑线程的消息队列整各种奇技淫巧的lock-free算法?好吧你写了个看起来没bug的,单节点网络报吞吐量提高了5%。那我把AOI和AI拆成单独的节点好了,整个集群的压测数据提高了50%。
帖子181&经验1195 &积分1195 &最后登录&
那现在为啥还有团队招C++程序员呢?
先看下传统C++端游团队的心路历程:
团队扩张,要招点业务逻辑狗。C++逻辑程序太特么难招了,低薪程序员成天core,高薪程序员不愿意做业务逻辑狗。
怎么办?改改改。
担心性能?那我IO线程不改了,还用C++;AOI不改了,还用C++。
逻辑线程主循环虽然跑的还是C++,但是python/lua各种侵占的逻辑模块越来越多,一开始可能只是小范围尝试,后来发现:咦?性能影响不是特别大嘛,慢慢的C++那块代码已经没人敢动也没人想动了。再不济,招个大厂出身的、用过bigworld的来做“架构师”,借鉴点大厂泄露出来的ppt讲座什么的,也来搞一组可以热扩展的gate,db前面也挂一组可以热扩展的proxy,再配合一下分线,性能问题还算问题吗?
帖子181&经验1195 &积分1195 &最后登录&
好吧,那究竟该用什么语言写游戏服务端呢?
用你喜欢的语言就行。
大概分下类:
第一类。C++叉某种脚本。
优点:一般是大厂职位,技术积累雄厚。
缺点:底层部分碰不得。即使有代码你也不敢改,很多都是线上跑过几年的,即使发现有bug你敢改吗?
帖子181&经验1195 &积分1195 &最后登录&
第二类。各种actor模型的服务端开发框架。比如直接Erlang,比如云风的skynet。
优点:大部分搞游戏服务端的程序员思维是比较传统的,只认逻辑线程+IO线程的死理,他们虽然没用过actor,但就是觉得MMO拆成actor不靠谱。但是程序员的初心应该就是学习新知识,所以你到这种团队可以远离没初心的程序员接触有初心的程序员。
缺点:基本上是限定工作城市在广州了。
[通过 QQ、MSN 分享给朋友]有关游戏服务器的架构问题. - ITeye问答
&&& 现做一款游戏,用C++做客户端和服务端.然而游戏里有很多的业务逻辑,而且这些业务逻辑在web端的网站上也用到(JEE平台)所以打算专门用JAVA做个业务服务端.由C++的服务端将业务处理进行转发到JAVA写的业务服务端.主要是想利用java的业务开发比较成熟的优势.
&&& 以前没做过这样的尝试,所以担心会出现现在问题,也不知道到底有没有必要这样做,所以想请教各位大大给点建议~小弟不胜感激.问题补充魔力猫咪 写道服务器端开发,有一个专门的Java项目DarkStar。用于建立大规模、并行化、高负载的网络游戏服务端。
目前该项目提供C和Java的客户端库。
首先谢谢你.
不过我们是C++做服务端定了的.只是业务服务端想用java.游戏那块还是用C++的.问题补充HelloJimmy 写道魔力猫咪 写道服务器端开发,有一个专门的Java项目DarkStar。用于建立大规模、并行化、高负载的网络游戏服务端。
目前该项目提供C和Java的客户端库。
client和server端是C++写的,中间的逻辑是java写的? 为什么要这样呢?有什么好处?在下愚钝,望指教
可能我没表达清楚.
是这样的,客户端如果有业务方面请求,那么先发给C++服务器,然后C++服务器负责和JAVA服务器通信,然后java服务端处理后反给C++服务器,C++服务器再反给客户端.
问题补充gembler 写道cqddklx 写道是这样的,客户端如果有业务方面请求,那么先发给C++服务器,然后C++服务器负责和JAVA服务器通信,然后java服务端处理后反给C++服务器,C++服务器再反给客户端.
按你这段话理解,感觉你是用c++写了个balancer
也不是,游戏方面的信息处理这些还是C++,JAVA只负责一些业务逻辑,例如支付,流程这些。
cqddklx 写道是这样的,客户端如果有业务方面请求,那么先发给C++服务器,然后C++服务器负责和JAVA服务器通信,然后java服务端处理后反给C++服务器,C++服务器再反给客户端.
按你这段话理解,感觉你是用c++写了个balancer
魔力猫咪 写道服务器端开发,有一个专门的Java项目DarkStar。用于建立大规模、并行化、高负载的网络游戏服务端。
目前该项目提供C和Java的客户端库。
client和server端是C++写的,中间的逻辑是java写的? 为什么要这样呢?有什么好处?在下愚钝,望指教
服务器端开发,有一个专门的Java项目DarkStar。用于建立大规模、并行化、高负载的网络游戏服务端。
目前该项目提供C和Java的客户端库。
已解决问题
未解决问题

我要回帖

更多关于 游戏服务端 的文章

 

随机推荐