尽管网页游戏开发应用的是服务器端脚本编写,但是它的运行还是需要一定的客户端技术支持的,比如网页浏览器,或者浏览器上常用的一些插件,如Java或者Flash。最新的网页游戏典型应用是大型多人在线角色扮演游戏。

最近参与开发了一款网页游戏,网页游戏和普通客户端游戏不同,虽然都可以称为网络游戏,从服务器角度来说,网页游戏所承载的用户量是很少的,一般一组服务器3-4000玩家同时在线。当然,技术含量也相对较低。开发周期短,一般为4-5个月。现在就网页游戏后台开发的技术,谈谈自己的看法。

首先是网关,所有玩家进入游戏,都是同网关连接,网关起着隔离游戏逻辑服务器和玩家的作用,保护游戏服务器内部不受外部玩家有意或无意的攻击。一般一个网关下面会挂上多组地图服务器,网关将用户逻辑转发到地图服务器上做具体的处理,处理完成后,地图服务器将处理结果送回网关,网关再转发给玩家。乍一看,网关似乎有可能成为性能瓶颈,确实是性能瓶颈。在网络游戏中,单个客户端上行流量是很小的,一般客户端都会做控制,在战斗和行走的时候,客户端没秒钟基本上只会有3条上行数据,但是下行广播数据是非常庞大的,曾经测试过300人同屏在线,每秒钟3个位置更新消息,广播量基本上是3003003=270000条消息,假如服务器为每一条消息调用一次send系统调用,那么意味着每秒钟27万次系统调用,是多么的庞大啊!

一般网关前端收发消息部分毫无疑问会采用epoll的边缘出发模式(非阻塞),多线程收/多线程发。客户端发上来的消息,通过网关路由到地图服务器做具体的逻辑处理,对于地图服务器通常都是一个服务器对应一副或者多幅地图,在这个地图上玩家发生的所有事件,都有这个服务器来处理,地图服务器采用单线程/单进程这种模式,主要是保证游戏逻辑的顺序处理。评价地图服务器处理能力的一个指标是地图服务器可以支撑多少怪,多少玩家,因为怪的AI都在服务器这边做,服务器需要主动触发事件,广播给玩家,这个时候timer是不可缺少的资源,timer开得越多,系统性能也就越差了。

另外,有一种简单的处理方式,开一个timer,几十毫秒统一处理一下地图中的事件,比如补怪等。对于数据库访问这一块,目前很多网页游戏开发,都使用的是和mongodb类似的内存数据库,是不是可以不采用cache,而直接访问数据库了呢?答案是错误的,根据具体情况来定吧,基本上到最后,性能瓶颈都会在数据库I/O这一块了,主要是读。对于一些访问量比较大的业务,比如,任务,战斗,背包等,肯定是读缓存,写缓存和数据库同时进行。再切地图和玩家下线时,清掉内存中的信息。原则上是服务器需要处理所有业务逻辑,所有接入游戏服务器的客户端都需要在网关进行鉴权认证,只有合法玩家才能接入游戏逻辑服务器。

为了不使网络延时导致玩家体验感下降,在及时战斗的时候,客户端需要先播放模拟打斗的动画,由服务器进行验证。不同地图消息的转发在地图管理器上面进行,地图管理器是一个进程,维护了所有地图服务器的连接,所有消息转发都在地图管理器来完成。同时,为了减轻网关的压力,一般一个网关接入的1000人左右,分多个网关,不同网关的玩家信息,通过地图管理器来转发。以下是服务器选择性的用到的一些开源的软件,并在此基础上做了封装:json4cpp、log4cpp、libevent、ACE、boost、mongoclient。

一个网页游戏开发要做大做强,首先要考虑的就是服务器端要如何实现,这样才能稳定网页游戏的运行,让游戏者能够轻松的玩这个游戏,让游戏者好好的体验游戏的稳定。

分享网页游戏后台开发技术经验相关推荐

  1. 游戏服务器开发技术小结

    转载请自觉标明原创出处 原文链接:http://gameislife.info/archives/category/游戏开发    游戏服务器开发技术小结 1 概述 本文从开发者的视角,浅析游戏服务器 ...

  2. 腾讯后台开发技术总监浅谈过载保护 小心雪崩效应

    摘要: 每个系统,都有自己的最大处理能力,后台技术人员对此必须很清楚,且要注意自我保护,不然就会被雪球压垮,出现雪崩. 雪球: 对于时延敏感的服务,当外部请求超过系统处理能力,如果系统没有做相应保护, ...

  3. mysql过载保护_腾讯后台开发技术总监浅谈过载保护 小心雪崩效应

    摘要: 每个系统,都有自己的最大处理能力,后台技术人员对此必须很清楚,且要注意自我保护,不然就会被雪球压垮,出现雪崩. 雪球: 对于时延敏感的服务,当外部请求超过系统处理能力,如果系统没有做相应保护, ...

  4. 网页游戏封包辅助技术

    易语言网页游戏封包辅助技术 链接: https://pan.baidu.com/s/1VUCZwllr62O0ZNlFDEOJ2A 提取码: niek

  5. 跨专业转计算机拿下百度java后台开发的经验分享

    前言 本文出自我的一位朋友,他是跨专业最终成功转行计算机,拿下了百度的java后台开发offer,之前他一直说着要给大家分享一波经验,今天完成了写作,希望对大家有帮助.(PS:另外也欢迎大家投稿分享自 ...

  6. 一个游戏大量合服代表什么_网页游戏 合服技术分享

    我们的游戏上个星期经历了第一个数据合服.简单说,就是把2个数据库合并在一个数据库,让2个服务器的玩家一起玩. 过程简直是惊心动魄,最终还是安全完成任务. 本文就分享下合服的各种技术细节. 需求说明: ...

  7. 游戏外包开发技术难点分析

    游戏开发涉及多个领域的技术,因此在开发过程中可能会遇到很多技术难点.今天和大家分享一些常见的游戏开发技术难点,希望对大家开发游戏有一定帮助.北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合 ...

  8. 实时联网游戏后台服务技术选型和挑战(一)

    概述:本文尝试从开发者角度梳理开发实时联网游戏后台服务过程中可能面临的挑战,并针对性地提供相应解决思路,期望帮助开发者依据自身游戏特点做出合理的技术选型. 维基百科关于网络游戏的定义:通过计算机网络, ...

  9. 后台开发技术(1)--概述

     说到后台开发,首选就有一个问题:什么是后台开发.就我理解,就是做服务器端开发.在服务器端运行着不同功能的服务,有直接与客户端连接的,有实现某一特定业务的比如用户注册登录,有数据存储的如基于mys ...

  10. 关于微信网页游戏背后的技术优化

    微信网页游戏主要分为渲染和逻辑两部分.渲染优化能让渲染相关的指令(WebGL/GFX)得到更高效的执行,逻辑优化是让除渲染之外的代码也能更高效的执行,本篇主要讲述逻辑相关的优化. 基础功能优化 微信网 ...

最新文章

  1. 欢迎大家批评:CSDN Blog用户体验调查
  2. 第十六届全国大学生智能车比赛掠影
  3. 1×pbs缓冲液配方_PBS缓冲液的配制
  4. python之numpy
  5. OpenGL阴影添加学习材料及总结
  6. 【Spring】Could not commit JPA transaction RollbackException: Transaction marked as rollbackOnly
  7. jquery学习--对象
  8. android 多个模块,Android 模块化中两个模块之间传递model
  9. 执行python manage.py celery -A HttpRunnerManager worker --loglevel=info 报错问题集锦
  10. 安全性(security)度量
  11. c语言实现循环结构的语句有哪些?它们的区别是什么?,2011年04月份计算机软件基础(一)复习资料二...
  12. vm虚拟机中搭建Linux
  13. 斐讯路由器宽带运营商服务器,斐讯(PHICOMM)路由器
  14. canvas高效绘制10万图形,你必须知道的高效绘制技巧
  15. 开源代码分析技巧之四——国外技术社区提问
  16. nginx 反向代理及负载均衡策略
  17. You're a brave boy!
  18. 博文视点2008站长大会之行
  19. F1,RECALL,TPR,FNR等指标计算
  20. 告别慢SQL,如何去写一手好SQL ?

热门文章

  1. mount.nfs: mount system call failed问题解决
  2. 《黑白团团队》第八次团队作业:Alpha冲刺 第五天
  3. My 2007 Fash game: Elite Shooter
  4. Python非线性拟合自定义函数参数(对标MATLAB-nlinfit函数)
  5. 在Visual Studio 2019 搭建 QGIS3.22 二次开发环境
  6. 转载:如何给公司取英文名字
  7. 实战开发支付SDK —— 对接微信支付看这一篇文章就够啦(含源码)
  8. 【转载】Python 数据皮尔逊相关性分析
  9. TCP客户端和服务端的互通信息
  10. 微信小程序解析后台返回的html格式