V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  timethinker  ›  全部回复第 19 页 / 共 19 页
回复总数  369
1 ... 10  11  12  13  14  15  16  17  18  19  
一般涉及到消息发送都基本上是异步流程了,建议在一个本地事务中将需要发送的消息写入到一个“消息发送表”内,另一个线程定时扫描这张表,然后将消息发送出去,发送完成就可以删掉或标记为已处理,发送失败记录失败次数和异常等原因。
使用帧同步的这种游戏一般来讲实时性和运算复杂性要求都比较高,服务端不大可能参与运算。对于外挂,每一家公司都有不同的策略,有的是通过举报,即不公平性导致其他玩家察觉出外挂的存在,作弊玩家顾忌账号的注册成本,或者通过技术性的检测(即在服务端模拟一个轻量级的客户端接收事件序列,模拟当前的状态是否有异常,不过开发成本也会比较高)。

假设当状态都由服务端来进行计算,客户端的每一个细节都需要考虑到,计算量就会特别大,而且将这些计算完毕的状态再同步下发给客户端的网络带宽也很高(例如某一个物品的位置、状态),而且对于物理引擎也要跟客户端同步,比如计算碰撞、物理惯性各种细节,因为逻辑帧相对来说都比渲染帧要低,客户端也不能够完全按照服务端下发的状态进行立即同步,不然画面显示就会有卡顿,客户端必然要在本地进行平滑过渡处理,处理不好可能会导致画面漂移等一系列问题,就需要一个取舍。

所以在服务器进行状态运算产生的问题就是网络带宽和运算性能。

现在有一种叫做云游戏的东西,客户端只是当做一个“视频播放器”,把触摸或按下键盘的操作发给服务器,服务器完成操作渲染后传输流数据给客户端,客户端安装包可以做到很小,只有几 MB 。对于高实时的游戏来说明显会感觉到延迟,就像手机通过 2.4G 无线 WIFI 投屏到电视一样,手机画面同步到电视上总会慢一拍。

也有说网络延迟会越来越高,这个问题其实有时候我们玩游戏也能够感觉出来,一种做法是快进播放,网络的延迟只是暂时的,当它跟上来了,就需要把之前的逻辑帧补上去,所有有时候会觉得画面突然的快进,其他的玩家不会等你,在其他玩家看来你只是停留在那里,谁叫你网络不好呢对吧?

假设服务端只负责事件转发,就需要确保客户端的运算结果是一致的,包括不同设备 CPU 的浮点计算结果一致(有自己的底层计算库),游戏引擎也要做适配,不然就会产生不同步的现象,要保证这一点就需要大量的测试,尽可能覆盖多一点的设备。但是开发成本显然更低,只需要侧重于客户端,并且减少了与服务端的联调,开发效率就会提高。
2021-03-24 09:32:22 +08:00
回复了 rqxiao 创建的主题 Java 请问 spring 里的事务和数据库中的事务本质上是一个东西吗
声明式事务实现原理就是利用 AOP 代理拦截目标方法,在目标方法调用前后实施事务外围工作。

感兴趣的可以看一下 org.springframework.transaction.interceptor.TransactionInterceptor
@3dwelcome 这应该是国内大多数中小型公司的常态,我们都知道有些事情是对的,但是却往往被情感左右。说到底一个人都不完美,更何况一个群体了。

所以尽管工作氛围不尽如人意,但是决定我们自身如何的还是我们自己。工作沟通上保持积极,认真做好自己的工作,专注和坚持从来都不容易,真的是需要长久的磨练的。有点鸡汤的味道了,祝你能够踏上自己所想的那条路。
CRUD 也是有讲究的,你看,实际上就两种操作,一种是修改,一种是查询。
简单的 CRUD 从前端到后端甚至数据库字段都完全一致,就是面向数据库编程,Service 都不需要。

复杂一点的,把这两种操作当成两套代码来写:

修改操作多以动词命名,会精炼出业务的实际需要的操作列表,把他们全部放在 Service 里面,每一个方法就是一个事务,或者使用门面模式封装独立的命令执行(命令模式)。

查询操作完全取决于你的消费方需要什么样的数据,把查询的逻辑处理全部放到 Repository 里面,返回 View 或者 DTO 啥的,只专注于如何批量查询并组合成需要的数据,可以是 SQL,可以是 HTTP 请求。很多人喜欢把查询也放到 Service 中,但实际上两者的关注点是不一样的。

读写分离以后好处是显而易见的,查询和修改都可以单独进行优化,最重要的是更加清晰可读。
当然以上只是一种方法,从技术上来讲,写业务代码最大的难度和关键点在于需求是否足够清晰,领域知识是否完备。反之造轮子则不需要这些额外的知识,但终究来讲轮子也是服务于某一个技术点的,最终也是要服务于业务的。
帧同步需要客户端计算结果严格一致,不然就会走偏,服务端在一局的游戏中只扮演数据转发的角色。
2021-03-19 18:50:23 +08:00
回复了 ligiggy 创建的主题 程序员 [不懂就问] 大家是怎么学习加密解密的
如果只是想要知道如何使用,则不必关心背后的算法,只需要学习一些使用案例,在不同的场景下使用不同的算法。
当然如果是专业搞数据信息安全这一块那就厉害了,起码数学功底要够硬。

不要自己去创造加密算法。
不要自己去设计加密算法。
不要自己去实现加密算法。

除非你知道自己在做什么。
spring-data-rest 一步到位
1 ... 10  11  12  13  14  15  16  17  18  19  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1172 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 24ms · UTC 18:11 · PVG 02:11 · LAX 10:11 · JFK 13:11
Developed with CodeLauncher
♥ Do have faith in what you're doing.