为什么go语言适合开发网游服务器端

个人觉得golang10分合适进行网游服务器端开发,写下这篇文章总结1下。
从网游的角度看:
要成功的运营1款网游,很大程度上依赖于玩家自发构成的社区。只有玩家自发构成1个稳定的生态系统,游戏才能延续下去,避免鬼城的出现。而这就需要屡次大量导入用户,在同时在线用户量到达某个临界点的时候,才有可能完成。因此,多人同时在线10分有必要。
再来看网游的常见玩法,除排行榜这类统计和数据汇总的功能外,基本没有需要大量CPU时间的利用。之前的项目里,即时战役产生的各种伤害计算对CPU的消耗也不大。玩家要完成1次操作,需要通过客户端-服务器端-客户端这样1个来回,为了取得高响应速度,满足玩家体验,服务器真个处理也不能占用太多时间。所以,每次要求对应的CPU占用是比较小的。
网游的IO主要分两个方面,1个是网络IO,1个是磁盘IO。网络IO方面,可以分成美术资源的IO和游戏逻辑指令的IO,这里主要分析游戏逻辑的IO。游戏逻辑的IO跟CPU占用的情况相似,每次要求的字节数很小,但由于多人同时在线,因此并发数相当高。另外,地图信息的广播也会带来比较频繁的网络通讯。磁盘IO方面,主要是游戏数据的保存。采取不同的数据库,会有比较大的区分。之前的项目里,就经历了从MySQL转向MongoDB这类内存数据库的进程,磁盘IO不再是瓶颈。整体来讲,还是用内存做1级缓冲,避免大量小数据块读写的方案。
针对网游的这些特点,golang的语言特性10分合适开发游戏服务器端。
首先,go语言提供goroutine机制作为原生的并发机制。每一个goroutine所需的内存很少,实际利用中可以启动大量的goroutine对并发连接进行响应。goroutine与gevent中的greenlet很相像,遇到IO阻塞的时候,调度器就会自动切换到另外一个goroutine履行,保证CPU不会由于IO而产生等待。而goroutine与gevent相比,没有了python底层的GIL限制,就不需要利用多进程来榨取多核机器的性能了。通过设置最大线程数,可以控制go所启动的线程,每一个线程履行1个goroutine,让CPU满负载运行。
同时,go语言为goroutine提供了独到的通讯机制channel。channel产生读写的时候,也会挂起当前操作channel的goroutine,是1种同步阻塞通讯。这样既到达了通讯的目的,又实现同步,用CSP模型的观点看,并发模型就是通过1组进程和进程间的事件触发解决任务的。虽然说,主流的编程语言之间,只要是图灵完备的,他们就都能实现相同的功能。但go语言提供的这类协程间通讯机制,10分优雅地揭露了协程通讯的本质,避免了以往锁的显式使用带给程序员的心理负担,确是1大优势。进行网游开发的程序员,可以将游戏逻辑依照单线程阻塞式的写,不需要额外斟酌线程调度的问题,和线程间数据依赖的问题。由于,线程间的channel通讯,已表达了线程间的数据依赖关系了,而go的调度器会给予妥善的处理。
另外,go语言提供的gc机制,和对指针的保护式使用,可以大大减轻程序员的开发压力,提高开发效力。
展望未来,我期待go语言社区能够提供更多的goroutine间的隔离机制。个人10分推重erlang社区的脆崩哲学,推动利用产生预期外行动时,尽早崩溃,再fork出新进程处理新的要求。对协程机制,需要由程序员保证履行的函数不会产生死循环,致使线程卡死。
波比源码 – 精品源码模版分享 | www.bobi11.com
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!

波比源码 » 为什么go语言适合开发网游服务器端

发表评论

Hi, 如果你对这款模板有疑问,可以跟我联系哦!

联系站长
赞助VIP 享更多特权,建议使用 QQ 登录
喜欢我嘛?喜欢就按“ctrl+D”收藏我吧!♡