zoukankan      html  css  js  c++  java
  • 使用 Go 语言开发大型 MMORPG 游戏服务器怎么样?(非常稳定、捕获所有异常、非常适合从头开始,但大公司已经有现成的C++框架、所以不会使用)

    使用 Go 语言开发大型 MMORPG 游戏服务器怎么样?
    和C Socket服务器比起来有什么优劣?可行性怎么样?


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

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

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

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

    用Golang就忘记继承那套东西, 用组合+接口

    用Golang服务器如何保证解决游戏服务器存盘一致性问题? stop 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分钟时间..

    现在北上广深蓉很多新开项目都选择了Golang,就是看到Golang的开发效率和招人上面
    对于Golang开发还有纠结可以看下我的博文:服务器开发语言比较

    打个广告, 各种开发笔记, 参考 战魂小筑 - C++博客

    开源服务器网络库, 欢迎赏星

    多个商用项目使用的 GitHub - davyxu/tabtoy: 跨平台的高性能便捷电子表格导出器
     
    作者:徐波
    链接:https://www.zhihu.com/question/21098952/answer/47703631
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
     
     

    大型 MMORPG 游戏服务端,估计以后都很难看到golang的“成功案例”。障碍不在于GC这些,而在于现在大型 MMORPG 只有大公司能搞得动。而大公司一般都已经有大牛,已经有积累了n年的服务端c/c++框架。

    如过真的有新进入者,需要从头开发服务端框架,那用go几乎是最佳选择。

    对页游/手游来说,go可以说是天地广阔,大有可为。一个用C++半年抄出一个游戏且时不时会宕机再加3个月才能搞稳定的团队 VS 一个用go三个月抄出一个游戏且从不宕机的团队,嘿嘿......


    作者:应跨江
    链接:https://www.zhihu.com/question/21098952/answer/21075482
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    JDK线程池原理之一:工作原理
    Hystrix Feign 特定状态码不熔断
    Hystrix熔断的方法级别(自定义commonKey)
    谨慎使用Exception
    FunctionalInterface~一个批量处理数据的类
    keycloak~账号密码认证和授权码认证
    keycloak~OIDC&OAuth2&自定义皮肤
    docker~添加hosts绑定的方法
    docker~产生的IP段与现有IP冲突问题
    高中数学知识要点及解题方法精粹[网摘]
  • 原文地址:https://www.cnblogs.com/findumars/p/9230722.html
Copyright © 2011-2022 走看看