http://uh.9ria.com/space-12147-do-blog-id-5251.html
假请求对于玩家交互,非常不友好。
拿偷菜的例子就够能说明问题了。下面说的则是在假请求的基础上,一些对于玩家交互的修正处理。
你对玩家的东西做了操作,改变了它们的状态,直接改玩家的数据是可以的吗?
举个极端的例子。比如你可以偷玩家的钱,原来人家100快,你给偷到只剩50了。如果那个玩家不在线还好,他上来看到自己只有50,看看日志知道你是干的,那事情就算没事了。但如果当时玩家还在线,他自己是不知道有这回事的,看到自己还有100快,而因为买东西也是假操作,他仍然可以买100块的东西,然后保存的时候服务器因为钱不够就让他回档。
这样很不好。
偷钱这种简单的也许可以接受,但遇到一些复杂的情况,玩家可能完全不明白怎么回事。而且回档这种事情应该是在出错的时候才有,玩家交互的结果并不是错误……
这个的解决方案则是,玩家的操作都不直接修改数据,而是相当于“发一封信”,然后玩家收到这封信之后才产生效果。这样玩家收到信之前买了100块的东西,系统还是给予认可的,然后保存的时候收到了信,打开减了50,钱就变成-50。
这样结果虽然有少许不同,但他是可以理解的。
并不一定是“发一封信”,这个的要点在于好友对自己的操作需要玩家自己确认后才生效,确认前效果都当做不存在,而目的就是为了避免回档。
这个同样可用户BUFF之上,因为BUFF影响众多,甚至连用真请求都不能解决。但只要这样推迟效果产生的时间,逻辑上就仍然可以保持正确性。
下面这个则是关于物品ID,确切的说,是礼品的处理办法。
如果你的游戏里物品都是堆叠的,或者说保存物品用的是类型的ID,则不存在这个问题。礼品过来只是在物品数量上+1而已。但是如果是游戏中的物品,包含存在时间,坐标等属性的话,那么为了区别同类型不同的物品,就需要一个专门的ID。
一般这个都是递增ID,平常的做法都是由服务器生成这个ID,自然没有问题。但如果是假请求的话,新增的物品暂时不会去服务器下行数据,所以这个ID只能客户端生成。
如果没有好友,礼品一类影响的话也是没有问题的,因为反正都是递增,新增的物品ID全都由客户端生成,服务端保存一下就好。但如果有好友送礼的情况……
我在线,客户端生成了一个物品,而正好这时候好友送了一个物品给我,如果两边都是简单的递增的话,ID就会重复。然后必然就是报错回档。
解决方案也很多,经典的做法就是做一个礼品盒(不一定是实体),玩家需要自己把礼品盒的东西拖出来,然后生成新ID,这不会产生问题。
还有变相的礼品盒方案,就是让服务端生成的ID从-1开始向负的方法递增,这样也不会重复。
我现在说的是一个比较彻底的方案,能应付所有情况,就是所谓的双ID。
物品都有两个ID,一个id,一个sid。前者是客户端使用的,后者则是服务端使用的。需要特别提出的是,区分不用物品用的是sid,服务端保存的也是sid,id它是不存的。而且客户端id是随便生成的(只要不重复),每次登陆游戏都可能错位(因为没保存)。
可以简单把客户端id理解成临时id。临时id存在的目的是在假请求没有发送,客户端还没有从服务端获得真正的id(sid)前的暂定物。因为一个物品存在就必须有id,客户端也需要它,但真正的sid应当是服务器生成的,为了在得到生成物之前客户端也要操作,这个临时id的目的就在这也仅仅在这。
临时ID的意义仅在假请求未发送前的短暂时间内,一旦发送,服务端就会生成所有物品的sid并返回,然后根据这些临时ID作为指引,分配到各个物品对象上。至此临死ID就失去了存在意义。但即使是这样,客户端运算还是得用临时ID,因为客户端不在乎数据保存的顺序,只在乎分清谁是谁。新创建的物品只有id没有sid,靠sid是分不清的,而id一定存在而且不同。所以它还是客户端需要主要关心的id。
总而言之,双id的要点就是,服务端看sid,客户端看id,保存时两边进行同步,同时关心两者只在保存时。
分享到:
相关推荐
社交网络(Social Network Service, SNS)作为互联网的一个重要组成部分,其大数据的应用已经渗透到了日常生活的方方面面,从社交互动到广告营销,再到数据分析和存储。在社交网络中,Facebook和腾讯无疑是最具代表...
在这个特定的课程设计中,重点是红外线集成器件sNS9201在延时开关中的应用,这涉及到电子技术、传感器技术和微控制器的综合运用。 sNS9201是一款高性能的红外线接收器集成电路,常用于遥控系统、无线通信以及自动化...
在IT行业中,社交网络服务(SNS)网站已经成为人们日常交流和信息分享的重要平台。而获取用户的联系人信息,特别是像MSN(Microsoft Network)这样的即时通讯工具的联系人列表,对于提升用户粘性、实现社交网络的...
深入研究CHSNS911 成幻SNS 的源码,开发者可以学习到ASP.NET 的MVC模式、三层架构设计、AJAX异步通信、用户权限控制等多个方面。同时,通过调试和修改源码,可以进一步提升对ASP.NET 开发的理解和实战能力。对于想要...
在CHSNS42中,如果使用MVC,那么它可能通过控制器来处理请求,模型来管理数据逻辑,视图则负责展示用户界面。 **社交网络功能**:成幻SNS系统通常会包含如用户注册、登录、个人资料管理、好友关系建立、消息通知、...
【ASP.NET源码详解——成幻SNS CHSNS41 v1.05 学生社区版】 ASP.NET是微软公司开发的一款用于构建Web应用程序的框架,它为开发者提供了强大的开发工具和丰富的功能,使得创建动态、交互式的网页变得更加简单。在本...
对于采用SNS的互联网的商业运作模式,更多的是作为传统商业运作模式的扩展,目前还没有形成清晰的盈利模式,一定程度上制约了SNS的进一步广泛应用和发展。本文在介绍SNS现状与电子商务赢利模式理论的基础上,分析了...
3. **网络请求处理**:由于sns4j涉及到网络交互,因此它可能会使用HTTP客户端库(如Apache HttpClient或OkHttp)来发送请求并处理响应。研究这部分代码可以了解它是如何处理网络延迟、错误重试和数据解析的。 4. **...
源代码中的Model层负责数据处理和业务逻辑,View层展示用户界面,Controller层接收并处理用户请求,确保各组件之间的协同工作。 三、数据库设计与管理 一个完善的SNS系统离不开强大的数据支撑。"近乎SNS论坛"源代码...
在基于SNS(社交网络服务)平台的电子商务模式创新中,我们可以看到这一创新模式的核心是将社交媒体的功能与电子商务的交易特性相结合,SNS平台如微信、微博、QQ空间等已经成为了人们日常交流的重要场所,而将这些...
通过阅读源码,开发者可以了解到系统如何处理用户交互、调度任务、管理内存等,这对于优化应用性能、解决系统兼容性问题和开发自定义ROM都有极大的帮助。 此商业项目源代码主要涉及了Android的社交网络服务(SNS)...
### SNS社区网站WEB即时通信技术解决方案解析 #### 公司背景及介绍 - **公司简介**:WEBIM20.CN(上海几维信息技术有限公司)是一家致力于技术创新的新兴WEB即时通信产品和服务提供商。该公司的核心竞争力在于长期...
社交网络SNS(Social Networking Service)的未来盈利模式是业界关注的焦点。随着互联网的快速发展,SNS网站需要探索创新的商业模式以实现可持续发展。以下是一些可能的盈利策略: 1. **SNS+网页游戏**:网页游戏在...
《脸谱SNS社交系统源码详解》 在IT领域,社交网络系统(SNS)是互联网技术的重要应用之一,其核心在于构建人与人之间的连接,提供信息分享、交流和互动的平台。脸谱SNS社交系统,作为一款仿照全球知名社交平台...
例如,当用户发送一条消息时,PHP脚本会接收该请求,处理消息内容,然后将消息存储到数据库中或通过WebSocket或其他实时通信协议推送到其他在线用户。此外,PHP也可能涉及用户认证、权限管理等安全方面的工作。 ...
标题和描述所揭示的知识点主要集中在Amazon Web Services (AWS) 中的Simple Notification Service (SNS)。AWS SNS是AWS提供的一个可扩展的云消息推送服务,它允许用户通过各种通信协议向应用程序或服务发送推送通知...
《电信设备-基于虚拟化服务和SNS信息聚合的信息处理系统和方法》是关于现代通信技术与信息处理的深度探讨,特别关注了虚拟化服务在电信设备中的应用以及社交网络服务(SNS)信息的聚合策略。这个压缩包包含一个核心...