这段时间在处理服务端人物移动广播遇到了问题,记录一下。
1.问题
现在的页游都朝着客户端的方向靠齐了,大地图,千人同屏。因此,也给页游的服务端开发带来了不少的挑战。假设一个场景地图是8000*8000大小,同时有1000人在。1秒钟内,每个玩家移动一次。按照最原始的做法,就是给同一个场景的用户广播消息。简单计算一下广播量:1000*1000=1000000的广播量,有点恐怖。
2.方案
优化的目标肯定是减少广播量了。我们看到,场景特别大,这对于美术同事来说不是什么好事了,对于服务端来说,未尝是坏事。假设最理想的状态下,用户能够遍布各个角落。那么,我们只想向能看到移动目标的用户广播消息就行了。假设一个屏幕大小为1600*1000,一个屏幕理论上分布了8000*8000/(1600*1000)=25人。还是每秒每个人移动一次,总的广播消息量是:25*25*40 = 25000.哈哈,整整少了40倍的广播量,服务端压力少了,替老板省了不少钱,回去申请加点奖金吧。
3.实现
按照上面的思路,实现起来就非常简单了。以前是给场景的每个用户广播,现在只需增加一步筛选的过程,根据坐标选择视范围内能看到移动目标的玩家。方法比较简单,这里就不提供详细的代码实现了,还有不清楚的,可以留言讨论一下。
4.优化
做到上面的,基本上已经符合标准了。但是,作为搞技术的,追求完美是无止境的。我们又在想,还能不能进一步优化?好的优化总是在仔细分析问题的基础上产生的。我们相信分析一下广播的内容,加入a移动了,那么在同屏的b,c分别会受到一条广播,内容大致是(a,from,to).同理,b移动了,a,c也是受到这样类型的广播。c在同一个时间段收到了两条广播。这两条广播能否合并呢,变成(a,from,to;b,from,to).这就是优化的灵感了。对于实时性不高的回合制页游(非即使战斗arpg),玩家看到其他玩家的移动,并不要求一定实时。为此,我们可以考虑合并
消息。
实现起来非常简单,可以用一种类似生产者-消费者的模型来实现。每次前端发来的位移消息都放入队列。后端有个独立的线程,每隔一段时间,取出来数据,合并消息,广播给相关的用户。上述a,b位移后,c只收到一条消息了
5.总结
很多问题的解决是来自对问题的透彻理解。遇到问题,我们应该庆幸,又有折腾了。
分享到:
相关推荐
omen-1.1 自己基于netty开发的服务端,支持spring配置服务器启动模式:http,tcp,websocket等,并支持NIO和OIO方式,项目已应用于生产,可以通过jar形式加入其它项目,业务类实现业务service,启动不依赖于其他应用...
虎牙小游戏服务端_java.zip虎牙小游戏服务端_java.zip虎牙小游戏服务端_java.zip 虎牙小游戏服务端_java.zip虎牙小游戏服务端_java.zip虎牙小游戏服务端_java.zip 虎牙小游戏服务端_java.zip虎牙小游戏服务端_java....
棋牌游戏源码-升级版牛来了-含服务端-客户端
"网狐服务端---包含开发库---不过只有部分能用" 这个标题揭示了我们正在讨论的是一个针对网狐游戏平台的服务端程序,其中包含了用于开发的库资源。然而,重要的一点是,这些开发库并非全部可用,可能由于各种原因,...
HelloCpp 一个简单的完成端口(服务端-客户端)类.mht HelloCpp 一个简单的完成端口(服务端-客户端)类.mht HelloCpp 一个简单的完成端口(服务端-客户端)类.mht
网页版游戏服务端是构建在线游戏,特别是棋牌游戏的重要组成部分,它负责处理玩家的请求,管理游戏逻辑,并确保网络通信的稳定性和安全性。本服务端主要针对网页环境,意味着玩家可以通过浏览器进行游戏,无需下载...
Java 第三阶段增强分析需求,代码实现能力【多用户即时通信系统】(服务端)---- 代码 Java 第三阶段增强分析需求,代码实现能力【多用户即时通信系统】(服务端)---- 代码 Java 第三阶段增强分析需求,代码实现...
资源名称:svn-linux环境搭建服务端-windows环境下客户端使用 资源截图: 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。
通过minio客户端可连接minio服务器,配置路径的访问权限,不必登陆就能下载指定路径的静态资源
微信小程序源码驾校管理系统-服务端-毕业设计致力于为驾校提供一套高效、智能的管理解决方案。本项目主要围绕驾校日常运营中的报名、排课、练车、考试等核心环节展开,通过服务端的强大支撑,实现了学员信息管理、...
微信小程序源码酒店管理系统-服务端-毕业设计,是一个综合性的项目,旨在通过技术手段提升酒店管理的效率与服务质量。该项目主要围绕酒店管理的核心流程展开,包括客房预订、入住退房、财务管理、客户信息管理等关键...
本项目“微信小程序源码未知小程序的设计与实现-服务端-毕业设计”是一个综合性的毕业设计项目,聚焦于微信小程序的服务端开发。项目旨在通过实践的方式,帮助学生深入理解微信小程序的后台架构与运行机制,提升其...
Windows-Mysql5.5服务端-只有31M,自用分享,识货拿走。 安装步骤:https://blog.csdn.net/lihua5419/article/details/73881482 以上为服务端。 客户端请查看个人资源--Sqlyog-mysql。
这篇实验报告涵盖了构建一个云笔记应用的全过程,主要涉及了Android客户端、服务端以及MySQL数据库的集成使用。这个项目是一个典型的移动应用开发实践,对于学习Java和Android开发的学生来说,具有很高的参考价值。 ...
此demo主要介绍的是完整的数据交互,从硬件-> unity -> webGL-> 服务端 -> 数据库之间的数据交互,解释了数字孪生的数据流。这是经过简化版的demo没有太多的功能,只有控制白天和黑夜,根据数据库的变化来动态的变化...
本文档是对svn服务端的安装,配置及使用的图文说明
例如,参与MMORPG游戏的开发与维护,他们可能要负责游戏的二次开发、新功能的添加、活动策划、数据库优化和玩家问题解决等工作。在这些工作中,技术主管需要展现其对技术的深入理解以及解决问题的能力。 项目经验是...
omen-1.3 自己基于netty开发的服务端,支持spring配置服务器启动模式:http,tcp,websocket等,并支持NIO和OIO方式,项目已应用于生产,可以通过jar形式加入其它项目,业务类实现业务service,启动不依赖于其他应用...
单点登录服务端项目cas-server 单点登录服务端项目cas-server 单点登录服务端项目cas-server 单点登录服务端项目cas-server 单点登录服务端项目cas-server 单点登录服务端项目cas-server 单点登录服务端项目cas-...
微信小程序源码社区互助养老-服务端项目,旨在通过技术手段为社区养老提供便捷、高效的互助服务。该项目主要功能包括老年人健康信息管理、社区活动组织、互助服务对接等,通过微信小程序实现用户端的操作,服务端则...