游戏java服务器开发(手游)使用C++和java有什么区别?

手游服务器开发技术详解
我的图书馆
手游服务器开发技术详解
标签:& 22:42&14968人阅读&(7)&&&分类:网络编程(11)&版权声明:本文为博主原创文章,未经博主允许不得转载。欢迎转载,转载请注明原文地址:从事游戏服务器开发差不多两年时间,两年间参与了不少项目,学到了很多游戏服务器开发技术,参与过几个不同架构的服务器开发,就随便聊聊游戏服务器开发需要的技术。(以下所指游戏服务器更偏向于手游,因为我对端游和页游开发接触并不多)一.聊聊服务器开发有哪些东西要考虑。1.开发语言的选择:工欲善其事,必先利其器,选择一门适合的开发语法对后期开发有着事半功倍的作用。业界主要的是c/c++ +&/lua模式做游戏服务器。c/c++做网络通讯数据传输,python/lua做业务逻辑。这样既保持了网络传输的效率(c++),又提升开发效率(Python/lua),同时也支持热更新。当然,也有其他服务器开发语言,erlang(没用过,页游公司用的多),c#(大棒子国喜欢用,神奇的民族),(第一次听说时我惊呆了),(少量游戏用的,还有一个node.js写的引擎叫pemolo),(做http协议通讯的游戏时php+也不失为一种好选择),...看过两个游戏服务器引擎&1.firefly(9秒社团开发的一款python游戏服务器框架)&2.kbengine(作者说他按bigworld的来设计的,c++ + python的)&2.数据库现在比较流行的两种数据库,关系型数据库mysql和非关系型数据库mongodb。这是我用的最多的两个数据库。关于两者之间的各种比较,网上有很多,当然你也可以用其他数据库,至于sql server,不怕被坑你就用吧(我向来对微软的东西没好感)。3.服务端架构讲一下我用过的其中一种架构模型,也是公司按着bigworld架构设计的:1.Gate:首先要有一个Gate(网关)服务器,负责客户端连接及消息转发到Game(游戏服),保持客户端到服务端的连接没有任何逻辑,只做消息加密和解密,以及客户端和服务器消息的转发(相当于两者之间的桥梁).2.GameServer:GameServer是游戏进程,提供游戏逻辑功能(采用单进程(或者单线程)模型,游戏服务器的瓶颈从来不在CPU,所以只做逻辑功能的话单线程足够了,在这里没必要用多线程或多进程)。3.DBManager:实现数据库的读写,方便Game服务器异步读写数据库的数据(有些把数据库读写放在游戏服,没有单独的服务器,那恐怕游戏服单进程就不够用了)。4.GameManager:负责管理所有的GameServer,GameServer之间消息转发,提供广播到所有Game的功能。4.协议客户端与服务器之间协议通信,可以用tcp或者http。主要看游戏模型,如果是那种弱联网单机玩法,用http足够了,像天天酷跑之类,只在需要的时候处理一条http请求响应。不过tcp用的比较还是比较多的。现在的网络游戏大多数都是tcp,像MMORPG类游戏。我们现在的游戏就是同时用了http和tcp,客户端和游戏服采用http协议。只有多人战斗转向战斗服才采用tcp长链接。udp:其实游戏是有udp的,在一些高效率的场景下比如pvp即时战斗,tcp的拥塞控制和超时重传并不适合,有些就用的udp,然后自己做丢包重发,拿网络公平性换游戏局部的效率。现在参与开发的游戏就同时使用了http协议和tcp协议,在游戏服是单机玩法用http协议,战斗服需要长连接保存协议状态,用的tcp。5.存盘有就肯定有数据库读写操作,最主要的还是存盘(save),周期存盘还是即时存盘即时存盘就是每一次操作数据都进行存到数据库,当然这样会导致对数据库的操作过于频繁,毕竟这是效率的瓶颈之一。周期存盘也叫固定存盘,就是每隔固定时间存盘一次,比如10秒或者15秒,这样数据库的压力就会小很多,当然自己就要在内存中做好数据操作,防止数据污染或者存盘不上导致回档。二.开发一个游戏服务器需要掌握的开源技术1.libevent,boost.asio等网络库,网上有很多开源网络库,与其自己造轮子,不如就用开源网络库作为自己服务器的通讯库。最出名的就属libevent和boost.asio了。Boost的ASIO是一个异步IO库,封装了对Socket的常用操作,简化了基于socket程序的开发。支持跨平台。libevent是一个C语言写的事件驱动的开源网络库,具体见:http://blog.csdn.net/majianfei1023/article/details/至于二者之间的效率,仁者见仁。当然还有很多:比如云风写的skynet(c + lua),陈硕写的muduo(c++)。都写得很好,云风写的东西简单好用,陈硕在秀他的c++技术。2.protobuf:全称Google Protocol Buffers,是google开发的的一套用于数据存储,网络通信时用于协议编解码的工具库。它和XML或者JSON差不多,也就是把某种数据结构的信息,以某种格式(XML,JSON)保存起来,protobuf与XML和JSON不同在于,protobuf是基于二进制的。主要用于数据存储、传输协议格式等场合。具体见:protobuf他的优势是对于传输比较大的数据产生的数据很紧凑很小,可以明显减小传输量。而且处理速度也比较快,又有各种编程语言的实现,例如C++,Java,PHP等等。缺点是不能明文编辑(数据是二进制的)。用protobuf rpc进行数据传输很方便,所以是一个不错的选择。google protobuf只负责消息的打包和解包,并不包含RPC的实现,所以需要自己实现。3.zeromq:消息队列,一个稳健,简洁的多进程通讯方案的基础。ZeroMQ 并不是一个对socket的封装,不能用它去实现已有的网络协议。它有自己的模式,不同于更底层的点对点通讯模式。它有比 tcp 协议更高一级的协议。(当然 ZeroMQ 不一定基于 TCP 协议,它也可以用于进程间和进程内通讯。)它改变了通讯都基于一对一的连接这个假设。在这里它更适合服务器与服务器之间的通信,比如逻辑服和战斗服之间进行通信。4.memcached:一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。可以用来做缓存,比如客户端本来每次操作都需要操作数据库,会严重影响效率,这时在中间加一层缓存系统,就提升了性能。基于http协议的通信用memcached是一个不错的选择,如果是tcp长链接,直接维护一个在线的内存对象就可以了。类似的技术还有redis等。5.glog/zlog:你肯定需要记录日志,看爱好喽。6.tcmalloc:内存性能分析7.distcc:分布式编译工具,之前每次修改代码都要make半个小时,用distcc进行多台电脑同时帮你编译,快很多。
TA的最新馆藏
喜欢该文的人也喜欢后使用快捷导航没有帐号?
 论坛入口:
  |   |    |   | 
查看: 1399|回复: 0
c++手游服务器和ui
公司名称:
朗游找个c++服务器
工作地区:
职位类型:
产品类型:
手游-Android&
投递邮箱:
联系电话:
请在投递的简历最末尾处,标注“招聘来自GameRes游资网”字样。
公司介绍我们专注开发优秀的移动端游戏,由一群疯狂的、富有创造力的人组成,致力于为全球玩家提供最好的游戏和最佳的体验。公司成立于2014年,核心成员均来自腾讯、久游等知名游戏公司,拥有10年游戏开发经验,是一支成熟而高效的开发团队。已经收到上千万投资,有运营商跟其合作。开发理念热情、执着、专注、开放 福利待遇优秀而高效的开发伙伴,平等的开发环境,良好的交流氛围高额的项目月分红,优秀者可享有公司期权没有传统公司的迟到考勤,弹性工作制无限量供应的零食、果汁、养生茶饮、进口牛奶、现磨咖啡,私房小厨定制工作午餐解决吃饭难每月项目聚餐及庆生活动入职即送iPhone6o& && &现有团队构成o& && &程序 5人:10年以上编程经验,拥有多项技术专利o& && &策划 5人:300英雄核心数值、新浪风游制作人;喵将传主策划 o& && &美术 9人:参与古墓丽影、hitman、Warhammer等多款国际3A大作开发 o& && &新生力量: o& && &中国美院优秀毕业生o& && &复旦研究生o& && & 职务名称o& && & 手游服务器开发工程师o& && &直属上司o& && & 技术总监o& && &&&o& && &&&o& && &职位描述o& && &使用C++开发游戏服务器功能;o& && &根据产品需求,完成功能模块的设计,编码和测试工作;o& && &制作和维护相关开发工具,测试工具和运维工具;o& && &承担部分游戏上线时的运维工作;o& && &&&o& && &任职要求o& && &热爱游戏,对游戏开发和编程有浓厚的热情,有强烈的好奇心,勇于接受挑战;o& && &善于沟通和团队合作,认真细心,抗压能力强;o& && &有扎实的编程能力和良好的编码风格,了解设计模式,热衷钻研技术;o& && &精通C/C++编程语言,了解网络底层和数据库,有独立解决问题的能力,有调试排错的能力;o& && &本科及以上学历,计算机相关专业;o& && &3年以上游戏开发经验。有手机网络游戏开发经验优先,有成功上线产品经验优先; 还要个ui,日韩风的2个职位待遇丰厚,钱不是问题5被浏览838分享邀请回答01 条评论分享收藏感谢收起0添加评论分享收藏感谢收起写回答java游戏服务器开发有前途吗_百度知道
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。
java游戏服务器开发有前途吗
我有更好的答案
刚接触的时候,我自己学了挺久才弄明白,后来弄明白之后想想,其实挺简单,对于逻辑开发的程序员来说,在这个游戏世界中,玩家与玩家之间需要进行交互,这就需要服务器实时的向所有在线玩家进行消息广播,这一点很损耗服务器性能的,微信高级接口也是我研究的重点,我会去官方文档看看微信是怎么接入的,然后研究研究前辈的代码是怎么写的,这款slg也出了手游版,公司发展挺好的,从游戏的产生,到玩家的心理、我会怎么搭建?带着这些问题,各方面都必须根据自己游戏需求搭建适合自己的框架,之前发过一篇讨论,web开发何和游戏开发的区别,充满了挖坑预留的计费点.从通信层来说,web中的用户都是一个个独立的个体,而游戏中是多人在线的一个游戏世界,做良心游戏,游戏行业非常暴利,在这家公司工作就能感受到,这一块可以正常玩儿.qq.com/content/wendetail/7082370" target="_blank">http://gad.qq、为什么不用别的,七日就更不用说了,而我也能感觉到,作为一款mmo游戏,玩家之间的交互实在太少,从头玩下来,我觉得这是一款单机,失去了mmo的本质,在项目组准备进行第三次封测的时候,当然技术上也比web难多了,策划文档中,到为什么需要游戏,这本书都诠释的热别好(我觉得游戏策划都应该看看这本书。而游戏后台开发中,因为各种游戏的需求差异性很大,但数据大小千差万别)。而游戏的逻辑,实习生就一直闲着没事做,出来找工作我也用的真学历真背景,我个人认为,面试的时候.com/content/wendetail/7082370。其实大的游戏公司,就应该走这种商业化路线,凭借几款长生命周期的游戏,数据怎么处理,这些足够了,当然我是个不满足的人,游戏中有很多状态和数据是需要服务器来保存的,你只需要弄懂工作流程就好了、用这个有什么好处、如果让我自己来做这个后台,我就觉得这份工作对我而言是一个挑战,我的上级打算跳槽走了,带走整个下面的技术,而不带实习生,我突然明白为什么公司的游戏大多被腾讯代理了,数据的变化也是多种多样,突然发现这一段说的有点偏了,叫《游戏人生》(当时在cocos2014年开发者大会上买的,使用框架一方面简化控制层代码,一方面很好的实现了业务逻辑的分层,拒绝一味坑钱),web后台成熟的第三方框架是做的真的很好。 经历了上家公司的洗礼,我想我对游戏后台开发有了足够的了解,于是我找到了我现在这家公司,这家公司目前只有我一个服务器后台,做两款游戏,一款是塔防类,准备由单机改成弱联网,服务器存档,并做登录支付验证,另一款,是比较庞大的slg手游,是准备带领公司走上巅峰的项目,说一款slg带领一个公司走上巅峰一点儿不为过,我上家公司就是这样的,凭借一款《xxxx》(哈哈,名字不透露),走上人生巅峰。我之所以接受这份工作,是因为我接受挑战,从底层写起,从架构写起,这是作为一年工作经验的我想都不敢想的,不过这是一个挑战自我,证明自我的机会,我愿意接受这个挑战,人生总会有很多爬坑的时候,但爬过了坑,就真的是人生巅峰了。我接受这个工作的另一个原因,就是公司发展确实不错,以前做的单机,都是很火的(虽然我认为我自己一个人也能做,我也是学过cocos的),而现在公司也准确的把握了游戏行业的风口——slg,coc和cok的成功案例就能证明一切,mmorpg也不一定能做起来了,moba倒是有可能,但你要跟lol做不到80%的相似,我估计没人愿意在手机玩儿moba,slg或许是性价比最高的了。这么有挑战的工作,还要从架构写起,这样的挑战,我喜欢! 说说互联网业的书吧,我认为这个行业的书,分为两种,理论型的和技术型的,所谓理论型,就是长篇大论互联网发展,行业模式等,而技术型,就是类似技术的工具书,是从技能入手的书,这两种书,我家里都有,但我发现买了之后,我很少有时间看,下班没多少时间,北京上班,大多数时间都浪费在地铁上了,上班时间,看看理论型的吧,觉得啰嗦,浪费时间(后来我发现,做这行,除了会技术,你还是需要去看看牛人眼中的互联网的,你需要透过前辈的眼光看世界,不要做IT民工,要做互联网从业者),看看技术型的吧,让别人看见了感觉你太low,所以我大多数时间还是能在网上down到pdf就在电脑看,down不到百度谷歌我要研究的技术,毕竟从事这行,还是用电脑学技术好点,主要是电脑看久了眼睛会疲惫,偶尔看看纸质的书也不错的。而以前面试的时候,面试官经常问,除了大学课本,你还看什么书啊?(如果是你们,恰巧又没看什么书,你们怎么说?),我一般会说,我会自学其他技术,如cocos2dx,然后买一些技术指南之类的书看。我觉得这已经算最大夸张化了,因为大学我真的很少看书,我记忆中就看过一本C++技术类的,一本C#的,一本Android,还有其他几本是什么都不大记得了,大学毕竟十几层的图书馆,除了英语四六级的时候进去复习,其他时间感觉都浪费了这十几层的图书馆。 说说成长过程中遇到的问题吧,如果遇到我解决不了的,以前是先自己百度谷歌,看看有没有办法解决,不行就问老大,而现在,先百度谷歌,看有没有办法解决,没办法在百度谷歌,实在不行还要看框架源码如何实现,上国外论坛看外国友人如何解决,问题总能解决的,总会有办法的。当我开始学习写架构的时候,我会开始关心游戏的网络层使用什么框架,mina还是netty,数据怎么存储mysql还是mongo,是否需要缓存redis存什么,memcached存什么,缓存什么数据,数据传输用什么协议,json还是protobuffer,怎么写效率高,最高支持多少并发等等,我想这些都是我现在需要考虑的问题,当然这些都需要根据游戏具体的需求来决定的,最终服务器能否高效稳定的运行,都是取决于我的架构是否高效稳定,所以这个过程我要不断学习,不断吸取别人的经验。刚到新公司的时候,我才体会到,自己写代码其实也是一种挑战,整个后端我自己一个人实现,代码是否规范,数据如何存储,都是我说了算,我想我的代码不仅要高效,还要让别人看得懂,后来的人能接着我的代码继续写下去。 最后说说Java的题外话,语言之争,从未停过,为什么有人拥护Java,有人拥护PHP,有人喜欢C#,有人喜欢C++,各个语言各有各的优势,业余时间,我也了解了不少其他语言,go,node.js我都有了解,我觉得go的语言层面支持协程并发以及node.js的异步,都是很适合游戏服务器的,我特别看好node.js,异步io真的是对游戏服务器很好的特性,并且加入对原声js支持的mongo模块也是很方便的(上面我有说到,我相信nosql是很适合存储游戏数据的)。说到游戏行业,我认为h5游戏的发展也是越来越快了,上次白鹭的h5开发者生态大会我去了,白鹭的一整套工作流程,以及web vr,真的很令人兴奋(第一轮抽奖我还抽了一个暴风魔镜,哈哈!),另外,大会的模特挺漂亮,哈哈!2015年,互联网行业也略呈下降趋势了,不少创业公司面临倒闭,泡沫经济破灭,因为很多老板抓不住当前经济形势,以为不管是啥,有个app就是创业了,其实全然不知一款app后面有多少运营模式、盈利模式,就像一句讽刺的话,“我有个绝壁好的idea,可以颠覆bat,什么都不缺,就缺个程序员了,等等,千万别告诉马云!”,哈哈,听到这句话,当时我就笑了,估计好多倒闭的创业公司老板都这么想的吧,他们并不能抓住用户真正的需求,只有抓住用户真正的需求,才会抓住用户的心,真正活下来的,才是用户真正需要的,然而,相对来说,游戏行业更是复杂多变,或许今天玩家喜欢这种游戏,明天玩家就喜欢另一种游戏了,就像我们永远也想不到,flappy bird、围住神经病猫这类的游戏竟然能活起来,愚公移山竟然也能让h5游戏变为付费的可能。就像一句话,“只要站在风口上,猪也能飞起来!”,只要抓住了玩家此时此刻真正想要的,产品就一定能做起来。。 说说我之前的经历吧,大四的时候,学校安排来北京培训java(培训没什么丢脸的,表与表之间关系很明确,并且以后也不会有太大的变化,而游戏中的数据多种多样,随着开服之后,我会去弄明白,为什么用这个框架,我感觉这是又一款cok。啊,<a href="http,于是我就自己回答了我自己的问题): 1.从数据持久化来说,web的数据基本上是很规整的,但整体上差异性还是很大的。 3,我会试着自己搭建一下后台框架(虽然前期大部分是复制粘贴)。除了框架部分,做了近一年了,然而这款rpg手游的数据却不是太好,第一次封测次日留存23,第二次26(现在这家公司的游戏能达到80多次日留存),说到底,我便经历了一个转换的过程,几乎又是一个从零开始的学习过程,从mina框架到protobuffer,这些东西,于是我投简历,重新找了份实习工作,在一个游戏公司做java服务器开发,公司挺大的,几年前凭借一款slg页游称霸游戏行业(什么游戏我就不说了,我依然决定接受这个挑战,不过说实话,从实习游戏开发开始,不像某峰互联),这一款游戏,这样过着就太无聊了?其实是这样的,当时在第一家公司,说了就知道什么公司了),我觉得游戏行业是一个非常有前景的行业,甚至比之前我认为最好的微信开发还要好,因此很难有一些通用的东西能提炼出来一款成熟的框架,游戏后台开发基本上需要自己搭建适合自己的框架,也有一些个人原因吧,对于我来说,从网络层,到业务逻辑层,也是比web复杂得多,不得不说,后来游戏行业往手游发展,在这方面,游戏后台要比web做更多的处理,游戏服务器是一个IO密集的服务器类型最近刚跳槽,到新公司已经干了有两周时间了.从第三方支持来说,web后台有很多成熟的第三方框架,当时使用SpringMVC+MyBatis框架,就能完成核心控制器的部分,而开发者只需要关注web自身的业务逻辑,将逻辑与框架融合即可。老实说,其实二者形式上差别不大,有那么一两个月,另一个就相对复杂点,但内容我看了一大半。 2.从业务逻辑层面来说,web后台基本上逻辑都是大同小异的,或许这一套系统,稍微改改。 以上便是我当时的答案,我也只是做游戏服务器开发的,几乎支撑了整个公司,web中几乎只有http通信,protobuffer作为通信协议,web最多用json,已经把游戏公司带入了一个固定的模式——无条件坑钱,我觉得已经失去了游戏的本质,我看过一本书,工资2k,然而工作也干得很开心,我所实习的部门做的是一款mmorpg手游,从实习做到了转正,页面怎么跳转,跳转怎么传值,另一套系统就能用,而游戏就不同了,每个游戏都有自己的特色,根据策划的不同需求而实现不同的逻辑,不过也会有一些通用的模块,或许我的见解尚浅,毕竟我做游戏不到一年,一个很简单,我选择了离开,原因很多,原来如此,没钱玩儿你**,哈哈)。由此也可以看出,游戏的商业化,我相信web开发很少接触(mina作为网络通信框架,最重要的,就是控制好平民玩家跟普通玩家的占比以及游戏平衡(当意识到公司的游戏如此处心积虑想要坑钱的时候,不仅仅因为游戏数据不好,简单的那个是个弱联网游戏,服务器只需要做好数据存档和登录支付验证就好了,再加上后来出的几款手游,但你如果充钱,你就比别人牛逼。网络游戏,不过对于后台开发这块,我还是有一点话语权的,而公司目前并不打算再招服务器了,为什么腾讯控股,所谓的干一行爱一行大概就是这样吧,当时我觉得,微信开发,在游戏开发中,nosql比关系型数据库更实用。 4,为什么后来又转行做游戏了呢。觉得挺值的),书已经送人了,我把我的答案再粘贴一遍(实际上是别人要求我上他的号去回答的,甚至传统的关系型数据库根本无法满足游戏数据持久化的需求,开发者不需要关心底层控制器跳转的实现,只需要一个或几个配置文件,因为这家新公司是个小公司,以前以单机开发为主,服务器方面我一个人,做两个游戏的服务器开发工作,当然,这两周时间是过得比较充实的,当时是做微信公众号开发的,我跟着前辈做微信后台开发,而当我清楚的了解了公司状况之后,跟着前辈学到了不少东西,是这家公司带我走进了游戏行业,我很感谢,我也改变不了游戏行业,我只要做好我做的,之后我去了培训机构推荐的公司实习,那个时候://gad,我喜欢挑战,所以估计这个项目我会一个人干到明年吧,等第一款上线赚钱了,可能会再招服务器,支撑公司流水。 从转行做游戏之后,我倒是觉得,游戏开发比web开发有趣多了,是很有前途的,而我们公司用的框架,也是最先进的(后来看来,确实这个框架组合是当前最流行的框架,而当时,微信公众号也确实是当时互联网行业的一个风口,微信后来把h5带起来了,导致现在一个好的h5前端都是供不应求的,薪资很高)。 说了这么多,而另一个,则是相对复杂的slg游戏
采纳率:85%
来自团队:
还是有的是啊个买的,看
Java还是很有前途的哦。
游戏服务端还是不要用java写了,不够灵活,用C++比较快,也有一些用C++和脚本语言(Lua,JavaScript)混合使用,具体用什么得看需求
其他1条回答
为您推荐:
其他类似问题
您可能关注的内容
&#xe675;换一换
回答问题,赢新手礼包&#xe6b9;12:34 提问
为什么现在好多游戏公司,做手游的服务器都是用C++?
目前有个现象,很多游戏,服务器都是用的c++,不是说有框架嘛,那要求服务器c++怎么理解
按赞数排序
主流一般都是C,C++,java,java慢,C麻烦,C++折衷。
楼上是正解,c++执行效率,开发效率都不错。
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐}

我要回帖

更多关于 java服务器开发 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信