在一间游戏公司的两个部门待过, 前一个部门以做web开发为主,后一个部门做游戏开发,我在两边都是做后端的。

在游戏部门待的时间不长, 不敢说已经深入了解游戏开发技术细节,我仅把我已经接触到的内容与之前擅长的web技术做对比,一来作为工作日志记录, 二来希望能给想从web转游戏的同学提供一个预先学习的方向,少走一些弯路。

这一系列内容我会连载发布,而不是一次性讲清楚所有内容, 毕竟当前还不敢狂妄的表示已经了解游戏开发的种种细节。

通用性

即使不同类型的软件开发也是具有一定相似性的,这种相似性随软件类型的不同而不同。 如web前端开发与web后端开发差异就挺大, 前端程序运行在浏览器中,后端程序运行在服务器上;前端程序操纵的目标是网页元素,后端程序操纵的目标是存储在服务器上的数据。前端和后端相似的地方估计也就编程语言使用的一些基础概念了,所以前后端程序员岗位转变存在一定难度,比如让一个没有任何后端经验的前端程序员立马上手写后端程序,几乎不可能。

然而web服务器和游戏服务器的差异就没这么大了,它们用的是相同的编程语言, 比如说java;它们用的是相同的数据库软件,比如mysql和redis;它们都运行在服务器端,比如linux server和windows server,且对稳定性要求及其严格。拥有这几处相同点两种程序在宏观上是完全相似的,对应程序员工作的转换也不存在硬性的技术障碍, 如果程序员技术基础扎实,完全可以平滑过渡。

差异性

因为业务的不同,web服务器和游戏服务器势必存在不同之处,然而这种不同并非技术上的不同,而是套路上的不同。

服务器类型的不同

web程序使用http服务,浏览器和服务器之间是http协议通信。游戏服务器通常是一个socket服务器,与游戏客户端之间保持长连接,如果是网页H5游戏,那么使用的也是全双工的websocket协议。通常,使用http协议的web服务器不用程序员费事去管理网络连接,程序员只要专注业务逻辑即可。而使用socket或者web socket等协议进行长连接通信却需要程序员手动编程管理,比如说断线重连游戏状态恢复机制,就需要手动处理网络连接。这表示socket编程难度大于http编程,从而导致游戏服务器编程大于web服务器编程。可这并不能表示游戏服务器编程不同于web编程, 如果一个web程序员不了解socket编程原理,那也不能算一个优秀的web程序员,毕竟http是以socket为基础的。

传输数据格式的不同

在web前后端传输数据除了使用http标准的键值对格式以外使用最多的是json,json被使用的一个最重要的原因是与JS无缝兼容,高效方便。然而,这种优势在游戏客户端中不存在,人家游戏客户端又不使用JavaScript编程,所以游戏客户端和服务器之间有更合适的数据传输时格式存在。

我接触到的是谷人希家的protocol buffer协议, 它相对于json的优点是

  • 体积小。经我测试,同样的数据内容,使用protocol buffer格式存储大小只有使用json存储的三分之一甚至更低,即使在某些特殊情况下也不会超过json的一半。

  • 严格验证数据格式,有xml xsd的功效。而json数据格式验证相对宽松,只要符合json语法就行,因此容易出错。反之,protocol buffer则更加稳定。

至于缺点最严重的是使用麻烦, 需要借助谷人希的第三方工具才行。

protocol buffer的使用细节,这里不作讲解。

分布式处理业务

我接触到的游戏服务器是微服务的一种形态, 整个游戏服务器的逻辑被分割成很多服务模块,分别运行在不同的服务器上。然而,我无法理解的是每个模块之间的通信居然使用socket,而不是更流行的http。游戏客户端与服务器之间使用socket连接可以理解, 然而,服务器各模块之间也使用socket却有些使我莫名其妙,虽然这会使服务器之间通信性能有所提升,却会带来编写代码任务过于复杂,稳定性下降等问题,为了些许性能提升而丧失项目的维护性,有点得不偿失。 不过也有可能我还没有理解其中奥秘,判断过于片面。

极端的性能敏感

游戏中实时对战模块必须使用c/c++实现,原因是JVM执行垃圾收集时会造成虚拟机停顿,也就是stop the world。在虚拟机技术发展日新月异的今天, gc停顿依旧会对游戏体验造成影响,因而必须使用老掉牙的c++, 这使我感到震惊。

另外, 游戏中大多数数据被放在redis中而非mysql也使我意外,数据持久化存储显然不是redis的优势,拿性能换稳定和安全,这种做法略显激进。

以上内容是我当前对于web开发与游戏服务器开发不同之处的见解,如有谬误请指出。 此外,在之后的学习和实践中的心得体会,会在之后的文章中继续发布。

做游戏与web的区别 - 服务器篇【1】相关推荐

  1. 高性能WEB开发 - HTTP服务器篇

    高性能WEB开发 - HTTP服务器篇 新产品为了效果,做的比较炫,用了很多的图片和JS,所以前端的性能是很大的问题,分篇记录前端性能优化的一些小经验. 第一篇:HTTP服务器 因tomcat处理静态 ...

  2. 用python自带的tkinter做游戏(一)—— 贪吃蛇 篇

    用python自带的tkinter做游戏(一)-- 贪吃蛇 篇 本人新手,刚自学python满半年,现分享下心得,希望各位老手能指点一二,也希望和我一样的新手能共勉,谢谢~ 大家都知道用python做 ...

  3. 用python的tkinter做游戏(七)—— 双人射击游戏Demo(类的应用) 篇

    不知不觉这已经是第七篇文章了,今天来谈谈python中类(class)在游戏中的应用. 老规矩,先展现一下之前的几篇博文: 用python自带的tkinter做游戏(一)-- 贪吃蛇 篇 用pytho ...

  4. 用python的tkinter做游戏(五)—— 魔塔 篇

    好久没更新了,今天继续:用python自带的tkinter做游戏系列的第五弹,魔塔 篇 之前的四篇博文介绍的分别是贪食蛇和俄罗斯方块,推箱子的简易版和推箱子的重制版. 用python自带的tkinte ...

  5. 用python自带的tkinter做游戏(二)—— 俄罗斯方块 篇

    上回分享了博文 用python自带的tkinter做游戏(一)-- 贪吃蛇 篇 今天继续,尝试用tkinter来制作一个更经典的游戏 -- 俄罗斯方块. 俄罗斯方块相信大家都玩过,一共有七个方块组,每 ...

  6. 用python的tkinter做游戏(八)—— 实现图片在tkinter中自适应大小(自动匹配窗口)

    用python的tkinter做游戏 系列: 用python自带的tkinter做游戏(一)-- 贪吃蛇 篇 用python自带的tkinter做游戏(二)-- 俄罗斯方块 篇 用python自带的t ...

  7. java游戏服务器面试_我做游戏开发这八年

    点击上方"CSDN学院精品课",选择"置顶公众号" CSDN学院精品课  IT人的职业提升平台 作者 | kakashi8841 简述这篇文章并不是想教会大家如 ...

  8. 虚拟主机做游戏服务器,虚拟主机做游戏服务器

    虚拟主机做游戏服务器 内容精选 换一换 应用容器化改造有三种方式,您可单击这里查看.本教程以某游戏为例,将该游戏进行微服务的架构改造,再进行容器化.本教程不对改造细节做深度讲解,仅讲解大致的建议.如需 ...

  9. 虚拟主机能做游戏服务器么,虚拟主机做游戏服务器吗

    虚拟主机做游戏服务器吗 内容精选 换一换 弹性公网IP申请成功后,将弹性公网IP绑定到弹性云服务器.裸金属服务器.虚拟IP.弹性负载均衡.NAT网关等资源上,可实现与公网的连接.绑定弹性云服务器.裸金 ...

最新文章

  1. python yield理解_对Python中Yield的理解
  2. Python OpenCV实现鼠标画框
  3. 【招聘(深圳)】TCL通讯科技控股有限公司
  4. 面向对象——类设计(五)
  5. vue 定时器:setInterval和setTimeout使用实例及区别
  6. php将数组转成字符串的,php怎样将数组转化成字符串
  7. 大数据教程,大数据实战教程,大数据教程电信信号强度诊断项目实战
  8. 电路交换技术与包交换技术
  9. 海贼王热血航线服务器维护4月,航海王热血航线4月29日停服公告一览
  10. Oracle TFA日志收集工具简介
  11. node koa解析excel表格 .xlsx .xls
  12. 南非世界杯-我在南非(二)
  13. 基层管理者的第一步——从“我”变成“我们”
  14. java实现顺时针螺旋填入
  15. mqtt协议之Apache Apollo 安装和配置
  16. 【配送路径规划】蚁群算法求解配送路径最短问题【含Matlab源码 2222期】
  17. 如何成为IC验证工程师?
  18. 如何创建 ESXi 安装程序 USB 闪存驱动器
  19. next_permutation函数与perv_permutation函数
  20. Linux排查和防守

热门文章

  1. 亲测用APICloud打包vue项目
  2. Javascript设置滚动条向上滚动的方法;JS设置滚动条滚动的代码
  3. 模式源于生活:代理模式---中介租房
  4. 【高项】第3章 项目立项管理【知识点精华笔记】
  5. C语言 —— 数组(数组的声明、初始化、访问)与字符串指针
  6. 熟练使用计算机word,计算机基础word2010上机操作.doc
  7. 学习Java自学好还是报培训班?
  8. Resources文件夹
  9. Oracle-SQL中日期加减一年的写法
  10. ActiveMQ学习 (一) JSM基本概念