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

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

从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因为没虚拟机, 只有薄薄的一层调度层 因此性能是非常高的, 用一点性能牺牲换开发效率, 妥妥的
16版后的GC优化的已经很好了, 如果你不是高性能,高并发Web应用, 非要找出一堆的优化技巧的话 只用Golang写点游戏服务器, 那点GC损耗可以忽略不计
和其他现代语言一样, 崩溃捕捉是标配功能, 我用Golang的服务器线上跑, 基本没碰到过崩溃情况
热更新: 官方已经有plugin系统的提交, 跨平台的 估计很快就可以告别手动cgo做so热更新
开发, 调试, 部署, 优化
LiteIDE是我首选的Golang的IDE, 虽然有童鞋说B格不高 但这估计实在是找不到缺点说了, 别跟我说Visual Studio, 那是宇宙级的
曾经听说有人不看好Golang, 我问为啥: 说这么新的语言, 不好招人,后面打听到他是个策划 好吧
真实情况是这样的: Golang对于有点编程基础的新人来说, 1周左右可以开始贡献代码 老司机2~3天
开发效率还是不错的, 一般大的游戏功能, 22人一周3~4个整完 这换C++时代, 大概也就1~2个还写不完 对接服务器sdk的话, 大概1天接个10多个没问题
Golang自带性能调优工具, 从内存, CPU, 阻塞点等几个方面直接出图进行分析, 非常直观, 可以参考我博客几年前的分析: 使用Golang进行性能分析(Profiling)
Golang支持交叉编译, 跨平台部署, 什么概念 linux是吧 不问你什么版本, 直接windows上编译输出一个elf, 甩到服务器上开跑不超过1分钟时间

Golang进行服务器开发, 最显耀的就是其并发架构, 能充分榨干每一个CPU 但是Golang和Erlang不一样, Golang使用了CSP的模型, 而Erlang采用的是Actor模型 两者区别仅仅只是消息队列归属范围区别而已 但带来的巨大的框架实现及使用差异让Golang和Erlang阵营里的童鞋们撕逼很久
其实可以这么理解 Erlang基于Actor模型的并发架构真正是一个框架, 让每一个人用同样的方法处理事情 而不用更多的担心横向扩展的问题 Golang的CSP并发架构没有很多框框条条 让开发者自由发挥,设计自己想要的结构 但碰到需要横向扩展时, 还是需要考验架构人的经验和实力
所以说, CSP和Actor其实着眼点不一样 所以还是不能同日而语 但项目还得做, 问题还得解决 不能为每一个项目重复设计, 编写重复的代码来应对各种横向扩展的问题 烦了, 火了, 所以就准备造一个用Golang实现Actor的轮子
调研了一段时间, 使用Golang做Actor模型的实现并不多 而且大多是实验性项目, 并没有真正像Skynet一样, 在项目中使用同时做开源的
说到Skynet, 这是一个极好的开源轻量级游戏服务器框架 使用lua的coroutine模拟goroutine, 同步+多线程逻辑, 用C底层帮你处理了复杂的Actor模型 留给上层只是发发消息, 管理下id, 很是惬意 再加上lua天生动态语言, 模拟Erlang的动态更新更不是啥大问题 因此在服务器界, Skynet变的有名了起来
既然要做轮子, 我果断选择不关门 讨论群都开了, 博客一直更新, github也有, 为啥不搞开源轮子呢 因此这次的服务器框架计划定位于开源 目的是为Golang贡献一款轻量级的游戏服务器框架, 由大家支持, 供大众使用

Ethr 是一个用 golang 编写的跨平台网络性能测量工具。该项目的目标是提供一个本地工具,用于跨 TCP、UDP、>

十几年前,WEB应用还没有崛起,大家还都在用"美萍点播"等CS架构来搭建点播平台,现如今是浏览器的天下了,能不用客户端就不用客户端,使用开源软件组合搭建点播+直播平台的BS架构备受青睐。
点播平台
(1)简单应用
如果不需要多码率播放,视频加密的话,直接上传mp4(H264)格式的视频就可以了(绝大多数浏览器都能直接播放),做好视频的存储,一个简单的点播平台不过如此。
(2)高级应用
如果需要多码率播放,视频加密,视频水印的话,这个可以使用开源库 ffmpeg 库来完成,服务端运行,稳定高效,可以很好的实现自动化。
直播平台
直播需要推流和拉流,这个还是很有技术含量的,有一定的技术门槛,自己去实现的话是不现实的。
(1)利用 nginx + rtmp 推流模块,不过不太稳定,毕竟 nginx不是专业做流媒体服务器的。
(2)利用 livego 等专业开源直播项目搭建,go语言 做网络应用天生的优势, 稳定性有待考验。
系统整合
经过调研以及不懈的努力,我把开源的 酷瓜云课堂腾讯云版 做了大量移植修改(存储,点播,直播)替换成本地的了,去掉了局域网内用不到的支付等功能。
下面开始安装,虽然是局域网应用,但是安装是需要连接外网的哦(后面有时间了再出一个本地安装的包),先准备好一杯咖啡吧(网络不好的话会有点慢哦)
友情提示
请使用干净的系统执行安装,如有安装过 nginx,apache 之类的会造成 80 和 443 端口冲突
配置要求
*** 作系统:Ubuntu | Debain | Centos
系统内存:2G+

安装指南

官方文档:点击访问
(1)下载安装脚本
cd ~ && curl >

(2)根据实际情况修改配置
nano installsh

(3)执行安装,快慢取决于网络,当有错误或者超时 请重试,请重试,请重试
bash installsh

(4)安装完成,请删除安装脚本
rm installsh

适合。框架足够成熟了 A Survey of 5 Go Web Frameworks
小型项目你甚至不用框架,用net/>首先解释一下反向代理,所谓的反向代理就是代理服务器,充当Web服务器网关的代理服务器。当请求发送到使用反向代理的Web服务器时,他们将先转到反向代理,由该代理将确定是将其路由到制定的Web服务器。

这个程序是将 本地的8086 端口作为代理服务器,代理上篇 golang >

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/zz/13491154.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-08-17
下一篇 2023-08-17

发表评论

登录后才能评论

评论列表(0条)

保存