使用Go 语言开发大型 MMORPG 游戏伺服器怎么样

Python016

使用Go 语言开发大型 MMORPG 游戏伺服器怎么样,第1张

使用Go 语言开发大型 MMORPG 游戏伺服器怎么样

如果是大型网路游戏的话,我觉得是不合适的。现阶段go语言的执行效率还是太低了。在底层编译器的优化方面做得和c++相比还是差了不少。go语言也是比较适合快速开发的专案比较合适

从2013年起,经朋友推荐开始用Golang编写游戏登陆伺服器, 配合C++做第三方平台验证. 到编写独立工具导表工具GitHub - davyxu/tabtoy: 跨平台的高效能便捷电子表格汇出器. 以及网路库GitHub - davyxu/cell: 简单,方便,高效的Go语言的游戏伺服器底层. 最终使用这些工具及库编写整个游戏伺服器框架, 我的感受是很不错的

细节看来, 有如下的几个点:

语言, 库

Golang语言特性和C很像, 简单, 一张A4纸就能写完所有特性. 你想想看, C++到了领悟阶段, 也只用那几个简单特性, 剩下的都是一大堆解决各种记忆体问题的技巧. 而Golang一开始就简单, 何必浪费生命去研究那一大堆的奇技淫巧呢?

Golang的坑只有2个:1. interface{}和nil配合使用, 2. for回圈时, 将回圈变数引入闭包(Golang, Lua, C#闭包变数捕获差异) 完全不影响正常使用, 复合语言概念, 只是看官方后面怎么有效的避免

用Golang就忘记继承那套东西, 用组合+介面

用Golang伺服器如何保证解决游戏伺服器存档一致性问题? s the world是肯定的, 但是Golang可以从语言层并发序列化玩家资料, 再通过后台存档

channel是goroutine虽然是Golang的语言特性. 但是在编写伺服器时, 其实只有底层用的比较多.

Golang的第三方库简直多如牛毛, 好的也很多

不要说模板了, C#的也不好用, 官方在纠结也不要加, 使用中, 没模板确实有点不方便. 用interface{}/反射做泛型对于Golang这种强型别语言来说,还是有点打脸

执行期

Golang和C++比效能的话, 这是C++的优势, Golang因为没虚拟机器, 只有薄薄的一层排程层. 因此效能是非常高的, 用一点效能牺牲换开发效率, 妥妥的

1.6版后的GC优化的已经很好了, 如果你不是高效能,高并发Web应用, 非要找出一堆的优化技巧的话. 只用Golang写点游戏伺服器, 那点GC损耗可以忽略不计

和其他现代语言一样, 崩溃捕捉是标配功能, 我用Golang的伺服器线上跑, 基本没碰到过崩溃情况

热更新: 官方已经有plugin系统的提交, 跨平台的. 估计很快就可以告别手动cgo做so热更新

开发, 除错, 部署, 优化

LiteIDE是我首选的Golang的IDE, 虽然有童鞋说B格不高. 但这估计实在是找不到缺点说了, 别跟我说Visual Studio, 那是宇宙级的...

曾经听说有人不看好Golang, 我问为啥: 说这么新的语言, 不好招人,后面打听到他是个策划... 好吧

真实情况是这样的: Golang对于有点程式设计基础的新人来说, 1周左右可以开始贡献程式码. 老司机2~3天.

开发效率还是不错的, 一般大的游戏功能, 2*2人一周3~4个整完. 这换C++时代, 大概也就1~2个还写不完. 对接伺服器sdk的话, 大概1天接个10多个没问题

Golang自带效能调优工具, 从记忆体, CPU, 阻塞点等几个方面直接出图进行分析, 非常直观, 可以参考我部落格几年前的分析: 使用Golang进行效能分析(Profiling)

Golang支 *** 叉编译, 跨平台部署, 什么概念? linux是吧? 不问你什么版本, 直接windows上编译输出一个elf, 甩到伺服器上开跑.不超过1分钟时间..

1.为什么golang的开发效率高?

golang是一编译型的强型别语言,它在开发上的高效率主要来自于后发优势,不用考虑旧有恶心的历史,又有一个较高的工程视角。良好的避免了程式设计师因为“ { 需不需要独占一行 ”这种革命问题打架,也解决了一部分趁编译时间找产品妹妹搭讪的阶级敌人。

它有自己的包管理机制,工具链成熟,从开发、除错到释出都很简单方便;

有反向介面、defer、coroutine等大量的syntactic sugar;

编译速度快,因为是强型别语言又有gc,只要通过编译,非业务毛病就很少了;

它在语法级别上支援了goroutine,这是大家说到最多的内容,这里重点提一下。首先,coroutine并不稀罕,语言并不能超越硬体、作业系统实现神乎其神的功能。golang可以做到事情,其他语言也可以做到,譬如c++,在boost库里面自己就有的coroutine实现(当然用起来跟其他boost库一样恶心)。golang做的事情,是把这一套东西的使用过程简化了,并且提供了一套channel的通讯模式,使得程式设计师可以忽略诸如死锁等问题。

goroutine的目的是描述并发程式设计模型。并发与并行不同,它并不需要多核的硬体支援,它不是一种物理执行状态,而是一种程式逻辑流程。它的主要目的不是利用多核提高执行效率,而是提供一种更容易理解、不容易出错的语言来描述问题。

实际上golang预设就是执行在单OS程序上面的,通过指定环境变数GOMAXPROCS才能转身跑在多OS程序上面。有人提到了网易的pomelo,开源本来是一件很不错的事情,但是基于自己对callback hell的偏见,我一直持有这种态度:敢用nodejs写大规模游戏伺服器的人,都是真正的勇士 : ) 。

2、Erlang与Golang的coroutine有啥区别,coroutine是啥?

coroutine本质上是语言开发者自己实现的、处于user space内的执行绪,无论是erlang、还是golang都是这样。需要解决没有时钟中断;碰著阻塞式i\o,整个程序都会被作业系统主动挂起;需要自己拥有排程控制能力(放在并行环境下面还是挺麻烦的一件事)等等问题。那为啥要废老大的劲自己做一套执行绪放user space里面呢?

并发是伺服器语言必须要解决的问题;

system space的程序还有执行绪排程都太慢了、占用的空间也太大了。

把执行绪放到user space的可以避免了陷入system call进行上下文切换以及高速缓冲更新,执行绪本身以及切换等操作可以做得非常的轻量。这也就是golang这类语言反复提及的超高并发能力,分分钟给你开上几千个执行绪不费力。

不同的是,golang的并发排程在i/o等易发阻塞的时候才会发生,一般是内封在库函式内;erlang则更夸张,对每个coroutine维持一个计数器,常用语句都会导致这个计数器进行reduction,一旦到点,立即切换排程函式。

中断介入程度的不同,导致erlang看上去拥有了preemptive scheduling的能力,而golang则是cooperative shceduling的。golang一旦写出纯计算死回圈,程序内所有会话必死无疑;要有大计算量少i\o的函式还得自己主动叫runtime.Sched()来进行排程切换。

3、golang的执行效率怎么样?

我是相当反感所谓的ping\pong式benchmark,执行效率需要放到具体的工作环境下面考虑。

首先,它再快也是快不过c的,毕竟底下做了那么多工作,又有排程,又有gc什么的。那为什么在那些benchmark里面,golang、nodejs、erlang的响应效率看上去那么优秀呢,响应快,并发强?并发能力强的原因上面已经提到了,响应快是因为大量非阻塞式i\o操作出现的原因。这一点c也可以做到,并且能力更强,但是得多写不少优质程式码。

然后,针对游戏伺服器这种高实时性的执行环境,GC所造成的跳帧问题确实比较麻烦,前面的大神 @达达 有比较详细的论述和缓解方案,就不累述了 。随着golang的持续开发,相信应该会有非常大的改进。一是遮蔽记忆体操作是现代语言的大势所趋,它肯定是需要被实现的;二是GC演算法已经相当的成熟,效率勉勉强强过得去;三是可以通过incremental的操作来均摊cpu消耗。

用这一点点效率损失换取一个更高的生产能力是不是值得呢?我觉得是值得的,硬体已经很便宜了,人生苦短,让自己的生活更轻松一点吧: )。

4、基于以上的论述,我认为采用go进行小范围的MMORPG开发是可行的。

如果跟C语言比,大部分指令码都胜出啊。Go, Node.js, Python ......

网易弄过一个Node.js的开源伺服器框架。

至于IDE, 不重要,做伺服器开发很少会要开着IDE除错的。最常用的手段就是打Log. 设定了断点也很难调,多个客户端并发。

那种单客户端连线进来就可以重现的bug倒是可以用IDE调,但是这种bug本来就容易解决。

用指令码语言,有一个很大的好处是容易做自动测试,可以更好地保证程式码质量。

--------------------------

开发效率当然是指令码高。执行效率,其实更重要的是并发,框架合理的话增加机器就可以直接提高效率增加人数。

用Go开发大型mmorpg服务端不会有问题的,如果掉坑里肯定不会是语言的问题。

唯一比较可能掉进去的坑就只有GC,其实很容易预防和调整的,具体细节可以看我部落格分享的文章。

但是技术选型不只是选语言,如果当时我手头有一套效能满意,开发效率OK,人员补给不会有问题的技术方案,不管是什么语言的,我肯定不会放弃它而选择冒险的。

public void actionPerformed(ActionEvent e)

{

if(e.getSource()==xinjian)

{

text.setText("")

}

if(e.getSource()==dakai)

{

openFD.show()

String s

抓必死是什么开发语言博客园-开发者的网上家园

今天,我们来聊一聊测试人员想要进阶,想要做自动化测试,甚至测试开发,如何选择编程语言。前言 自动化测试,这几年行业内的热词,也是测试人员进阶的必备技能,更是软件测试未来发展的趋势。...

博客园

swift语言 必死 现在iOS APP开发,用oc语言的多,还是swift语音的多?酷米网

这门快速发展的语言,很多实际场景无法有效实现功能,尤其是一些复杂的开发需求。另外,手机原生开发的一部分市场份额被H5开发技术所取代,而这种新的原生语言必然很难 1。Swift目前必须用Xcode...

酷米网

python3.0开发语言简介-程序员大本营

python3.0开发语言简介,程序员大本营,技术文章内容聚合第一站。

www.pianshen.com

其他人还搜了

不能作为网页开发语言的是什么

开发手机游戏用什么语言

c语言适合开发什么

安卓系统版本开发语言是什么

学什么开发语言好学

学什么开发语言好就业

各种语言写网络爬虫有什么优点缺点?芝士回答

总之,如果开发一个小规模的爬虫脚本语言是个各方面比较有优势的语言。如果要开发一个复杂的爬虫系统可能 Java 是个增加选项,C++ 我感觉写个模块之类的更加适合。对于一个爬虫系统来说,下载和...

芝士回答2022-07-08

“阿里味”PUA 编程语言火上GitHub热榜,标星1.9K-编程之家

其实,这是一位国内程序员开发的 互联网黑话编程语言,英文名叫PUA Language。这个语言成功将两大部门员工对齐:非技术部门能 快速 掌握编程要领,程序员也能获得每天PPT汇报的快感。看到这么...

编程之家2022-10-15

游戏开发中常见的10种编程语言分别是什么-编程语言-亿速云

游戏开发是非常有经验和熟练的程序员的工作。它可能花费数亿美元。这是一项非常有创意的工作,也需要技术水平。他们需要具有特定需求的编程语言。以下是用于游戏开发的十大编程语言的列表。1、...

亿速云计算2022-01-11

python-编程语言-CSDN开发者互助问答社区_程序员有问必答-CSDN问答

问题遇到的现象和发生背景 各位好,我正在尝试用抓包,获取剑网3推栏的一些信息,但是目前,根据我获得的API,请求过去貌似还缺少一些参数。遇到的现象和发生背景,请写出第一个错误信息 缺少...

CSDN技术社区

十大受欢迎的编程语言你pick哪一个?腾讯新闻

甚至很多家长直接从娃娃抓起,几岁的小孩就开始去学编程!然而现在已有的计算机语言总数总计达9000多种,但是其实只有50种编程语言是较为流行的。在众多的编程语言中,究竟抱团前十的有哪些呢?...

腾讯网2020-07-30

编程语言里的网红 python语言有何优势-起航学习网

人工时代真的来了,为了我们下一代的教育,我们的未来应该从小开始抓起,python编程语言将融入低幼阶段,并逐步普及开来。文章出自:http://www.epx365.cn/peixun/software/201841261.html 文章...

起航学习网2018-07-08

各种语言写网络爬虫有什么优点缺点?

回答:26浏览:23万+赞同:10

[最佳答案]反对@Kenneth,他见过的爬虫太少了首先取决于目的如果是一个站点,单一目的,用习惯的语言写吧,学别的语言用的时间都够重构两遍的了。如果是有100左右的站点,做个框架,把你的爬虫管理起来,...

知乎2017-02-11

相关搜索

学什么开发语言好

学什么开发语言

现在学什么开发语言好

安卓开发语言

开发语言

c语言开发需要学什么

c语言开发环境

开发语言是什么

11-20条

Python开发语言的简介及优缺点-知乎

Python 简单易用,学习成本低,代码优雅干净清爽 Python 标准库和第三方库非常多,多到甚至有些恐怖,太多程序员为之添砖加瓦 Python功能强大,从网站 网抓 数据处理 科学计算 AI 运维都能干,...

知乎2022-07-28

该选择哪个语言开发爬虫?php教程-PHP中文网

我觉得不是说选择哪个语言,主要是看开发者对哪个语言最熟悉。如果是我的话,我会用 Node.js Node.js 有一个 Cheerio 库,用来解析 HTML 效率十分不错。它的 API 风格是类似 jQuery 的。啥都不...

php中文网2016-06-06

机器人研发十大热门编程语言:不死 Java、不朽 C/C+、新贵 Python_CSDN资讯的博客-CSDN博客_机器人编程

阅读:4w+

而回归本文主题,对于首选编程语言的选择,没有最佳的答案,但本文中,我们将介绍程序员在机器人编程中最流行的十大编程语言,并通过对比其优缺点,希望可以给予开发者提供一定的参考方向,做出...

CSDN技术社区2017-11-28

最适合青少年学习的编程语言 – Python-今日头条

高考政策出台在即,国家在抓信息技术教育,即使是今年高考也已经用到计算思维逻辑,未来人工智能必然会用到。10到16岁的孩子,大脑发育尚未完成,这段时间的学习会促进大脑神经元突触的生长以及...

今日头条2018-08-04

各种语言写网络爬虫有什么优点缺点

真正好的系统还包括完善的任务调度:dom.GAE 的支持,如果开发一个小规模的爬虫脚本语言是个各方面比较有优势的语言: 1,好的设计会节约大量的带宽和服务器资源,请求页面时会有较长的延迟,要...

搜狗问问2019-05-03

go语言_证券指标的博客-CSDN博客

背景 在接触Golang以前,我用C/C++、Lua及Python作为主要开发语言。C/C++的问题:开发效率低,对开发者要求高libc只向后兼容,运维难度偏大Lua/Python的问题:动态语言,缺少编译过程,低级错误...

CSDN技术社区2016-01-12

Go语言介绍-码农教程

这个不用多做介绍,作为开发Go语言的公司,当仁不让。Google基于Go有很多优秀的项目,比如:https://github.com/kubernetes/kubernetes ,大家也可以在Github上 https://github.com/google/ ...

码农网2021-10-01

黑客都使用什么编程语言?python|javascript_网易订阅

评论:73

他们的年龄在16到21岁,现已经释放,警方表示调查还在继续,但警方并未透露这位主谋是否被抓。与此同时,自称是欧洲最大的黑客协会Chaos计算机俱乐部做了一份调查,其目的是研究黑客们都使用...

手机网易网2022-03-29

“阿里味”PUA 编程语言火上GitHub热榜,标星1.9K!Wang_AI的博客-CSDN博客

其实,这是一位国内程序员开发的 互联网黑话编程语言,英文名叫PUA Language。这个语言成功将两大部门员工对齐:非技术部门能快速掌握编程要领,程序员也能获得每天PPT汇报的快感。看到这么有趣...

CSDN技术社区2022-01-08

这门语言将成为法国高中官方编程语言,微软也用它做脚本?

作为一种解释型语言,Python的设计哲学强调代码的可读性和简洁的语法。相比于C++或Java,Python让开发者能够用更少的代码表达想法。Python 或将成为法国高中的官方编程教学语言,这将带来...

美篇2018-12-01

相关搜索

学什么开发语言

学什么开发语言好

ai开发用什么语言

开发语言是什么

现在学什么开发语言好

linux开发用什么语言

cshop是什么开发语言

开发手机游戏用什么语言

gis开发用什么语言

windows开发的语言是什么

没有基础如何学习区块链的方法主要有两种,一是自学,二是去培训。以下是个人观点和经验,不喜互喷,谢谢。

区块链学习说真的是一个漫长且艰辛的过程。因为它的技术难度高、注重实践性、行业内并没有区块链标准等等。如果决定学习,便需要付出很多的东西。比如时间和精力,网上有自学的平台,比如网易云课堂、b站、腾讯课堂等。自学的话可以将区块链技术分为多个部分,依次学习最后再整合,多结合区块链行业中的案例进行总结思考。

区块链专业课程有不少的大学已开设,但我并没有亲身经历。不过想学看哪里有公开课可以自己多搜集一些,外面的培训机构很多我并未接触过不想做评价。谢谢