已阅读5页,还剩15页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目录CCU:2Message rate2Message size2Bandwidth usage2Process resource usage3Hardware specifications3Test description3一个简单的数学运算3UDP的使用3动态房间创建4研发的基本知识4连接阶段5HRC系统5登录阶段7加入和创建房间10房间的架构13SFSObject and SFSArray14Database recipes14怎样添加Java库或扩展依赖15怎样配置与外部数据库的连接15怎样创建一个基于扩展的自定义登录16查看服务器logs18你的扩展的调试18如何安排定时任务19CCU:测试中,同一时刻参与的用户总数量。Message rate单个客户端与服务器每秒交换的消息数量。它能被表达作为一个常量或一个平均量,在消息量是变量的情况下。Message size在测试中消息的平均大小。如果下一个参数被包括,它被较少的关心。Bandwidth usage它是一个根本的量,可能是最感兴趣的一个,因为它显示了服务器能够处理的数据量,以及CPU的成本和内存消耗。Process resource usage在测试中,它显示了CPU和内存的使用数量.Hardware specifications服务器主机的描述,包括CPU类型, RAM,系统架构(32/64 bit),操作系统类型,网卡以及其它的相关配置Test description基准测试的详细描述,测试的目的(例如显示广播消息的性能),测试的周期(是否运行1小时?一天?一个月?).一个简单的数学运算用户每5秒发送一个消息, 12000 CCU试玩一个普通的多人动作游戏.这儿是典型的消息率 1020 msg/secUDP的使用注意,你应该不要过度的使用UDP.在作者的观念中,UDP是专注于14.4k的调制解调器运行游戏的年代.特别的当运行在某些防火墙,滤波器后面,UDP将变慢比TCP,更多的耗费网络硬件资源.额外的UDP包将在某些时候丢失.动态房间创建在更多高级的情节,在不同的房间甚至能运行不同的服务器扩展.它可能是不同的游戏或者不同的带不同困难等级的FPS游戏.研发的基本知识在SFS中,我们使用分区的概念,来指明服务器的一部分专注于于一个特定的程序.允许研发者运行不同的游戏和应用程序,且彼此间没有干扰.一个SFS2X客户端将典型的跟随下面简单的步骤,来开始与服务器端通信:1. 尝试与服务器连接.2. 登录可用分区中的一个3. 发送和接收请求,并处理服务器事件.在SFS2X下面,我们有2个主要的服务器控制器:1. System Controller主要的一个.2. Extension Controller这个控制器专注于处理自定义客户端请求,自定义的请求被定向到服务器扩展件 。连接阶段 SFS2X的连接被执行在2个阶段:1. 一个物理的TCP连接被打开到服务器2. 一个“握手信号”在 客户端和服务器端被执行,以此交换一定数量的参数。在握手阶段,服务器需要验证客户端API的版本是不是受支持,发送回许多客户端应存储在本地的配置。HRC系统一个低级别的机制,允许用来恢复一次突然的中断,对于研发者来说是完全透明的。客户端被通知的不同事件:CONNECTION_RETRY: 当客户端已经侦测到了一个突然的中断,并且重新连接到服务器正在执行。CONNECTION_RESUME: 当重新连接是成功的,事件被通知。否者重新连接失败一个SFSEvent.CONNECTION_LOST将被替代发送。服务器端同样的方法能处理这种情形,用来监听的事件为SFSEventType.USER_RECONNECTION_TRY and SFSEventType.USER_RECONNECTION_SUCCESS events。In order to turn on this feature you will need to configure the User reconnection timeframe parameter in the General tab of the Zone Configurator module from the AdminTool (highlighted in the following image).The value is expressed in number of seconds and any values greater than zero will activate the system. Common settings range between 4 to 15 seconds depending on how your application requirements and how susceptible is your server logic to waiting for a missing player.登录阶段l User custom login这个参数决定了控制器将怎样接受和处理登录请求。False: System Controller将处理登录请求。在这种情形下任何用户的名字将被接受,除非同样名字的另外一个用户已经登录在同一个分区。密码将被忽略。如果空的字符串被投递,服务器将自动产生一个”guest”用户名。(例如:Guest#42);True: Extension Controller将处理登录请求。允许研发者的扩展件来验证用户的证书和任何请求的操作的行为。l Logging in a ZoneThe login phase is always initiated from the client side by sending a LoginRequest to the Server. This requires several parameters: user name: (optional) a user name password: (optional) a password Zone name: the name of a Zone; it must exist on the server-side extra parameters: (optional) an object containing extra custom data; typically this is used in conjunction with an Extension-based login in order to send custom data to the server-sideLogging in a Zone requires just a few lines of code: in essence you just need to register the SmartFox class instance to receive the SFSEvent.LOGIN and SFSEvent.LOGIN_ERROR events and proceed with the request.成功登录后,场景后台, SFS也执行一些其它操作,我们需要了解:1. 自动订阅缺省的房间组:在Zone Configurator,你能声明一定数量的public Room Groups。通过逗号分隔组名。缺省的一组名字叫“default“,你能添加更多的。一个房间组,无非是一个字符串ID,它被用来组织房间在不同的类别,叫做房间组。2. 用初始化房间列表来填充客户端:在这个例子中,上面的分区包含3个不同的房间组,分别叫Europe,America和Asia,每个包含一定数量的房间。如果我们假设分区的default group属性被设置为”Europe,America”,那么客户端的房间列表将被填充,使用这2个组里面的所有房间,并将接受任何感兴趣的变化。(例如:一个新的房间被创建,或者另外一个被移除)。自定义登录的一般步骤:One very common use case in the login process is to write an Extension that handles the user credentials and checks them against your database. In order to do so you will need a few preliminary steps.1. Setup a database connection. You can follow this tutorial on how to configure SFS2X to communicate with your DB. 2. Prepare a simple Extension that will execute the validation of the user name and password. We provide an in-depth overview of the Extensions and a login how-to tutorial. 3. Turn on the Use custom login setting in the Zone Configurator and setup your Extension. 加入和创建房间房间被创建用2种方法:l 静态的:经AdminTool的Zone Configurator模块。l 动态的:在运行时,房间能被从客户端或服务器创建或销毁。从客户端或服务器端创建的房间没有什么不同,无论怎么样,在服务器端它能微调房间的某些方面,而客户端因为安全因素不能访问这些方面。同一时间加入一个或更多个房间:在大多数情况下,客户端将可能移动从一个房间到另外一个,新的一个加入后离开先前的一个。在SFS2X中这是缺省的模式。有些情形,无论怎么样,我们需要客户端进入另外一个房间时,保留目前的房间(可能是一个游戏或聊天)。让我们来检查客户端JoinRoomRequest的构造函数。下面的参数是可用的.l id: 房间ID能是它的名字或数值。l pass: (可选的)如果房间是private的,需要密码。l roomToLeave: (可选的)指明哪一个房间应该被留下,当新的一个是被成功加入时。缺省的最近加入的房间是被使用。无论怎么样,如果用户已经加入了几个其它的房间,在这儿我们能够指定应该被留下的房间。-1将表明没有房间应该被保留。l aspect: (可选的)这个选项是游戏房间通用的,它允许用户加入游戏,作为一个“观众”在客户端为了保持加入房间的追踪,API提供了一队有用的工具:l lastJoinedRoom: SmartFox类的一个属性,提供最经加入的房间的引用。当这个值被设置为null时,没有房间被加入。l joinedRooms: 同样类的一个属性,提供当前客户端加入的房间列表。最后,roomManager对象允许查询本地的房间列表数据。下面我们来关注房间的2个不同类型:游戏房间和非游戏房间(规则的房间)。l Regular Rooms: 缺省的一个新房间被创建,该房间带有isGame标志,并设置为false。你能使用这些房间为了所有的目的,如大厅,聊天室,会议室等。l Game Rooms: 当isGame标志被设置为true时,房间提供了2个额外的功能,且大多数游戏是需要的。u 自动分配玩家ID: 值从1到N.u 支持观众 :房间能够创建一定数量的玩家位置或房间位置。为了考虑SFS 1X,SFS2X平台提供了一系列的客户端和服务器API,特别的设计为了游戏的创建,管理,包括public,private游戏,游戏邀请,用户和房间匹配等更多。A new type of game Room was introduced via the SFSGame class which is found both on the client and server side of the API. The new class extends the Room object providing dozens of new functionalities that enable developers to create advanced player matching, challenges and game invitations in a snap.We highly recommend to take a look at the Game API article for more informations房间的架构上面的图表阐明了所有的房间组是关于什么的。我们能看见分区包含的所有房间,他们看起来是一个级别。这是表达房间组一般架构最好的方法:实际上一个组仅仅是一个额外的ID被应用到每个房间,它用作分类,因此能允许过滤或分离。这些新的特征允许客户端限制整个分区视图结构到一个或多个组,替代整个目录。使用情况是无数的:分割不同类型的游戏房间,创建应用程序的不同区域,隐藏用户的特定类型的特定房间等。房间分组的优点在于我们能极小化传送到客户端的房间数据,减少更新时间的数量,使应用程序更加的效率。SFSObject and SFSArray这2个类主要关注于客户端和服务器的数据处理和传输。这2个类提供良好的控制,对于每一个数据元素经由网络发送,并提供高速的序列化经由缺省的SFS2X二进制协议。For more details and examples on how to use SFSObject and SFSArray we highly recommend to take a look at the examples provided with SFS2X and consult the documentation found in the API Documentation section of this website. Also please check the Class serialization advanced tutorial.Database recipes这个方法讨论了一般的情形,你需要验证客户端的证书,通过存储在数据库里的用户档案。我们将显示怎样执行更多的客户端逻辑在登录后,例如配置User Variables和 加入服务器端的房间。在服务器端实现自定义的 登录是一个简单的流程。SFS2X启用下面2个登录事件 :l USER_LOGIN: 当一个客户端请求加入一个房间时,被启用。在这儿你能验证客户端的证书,并决定是否用户能继续登录流程。在这个阶段客户端被当做Session Object,而还没有作为SFSUser.l USER_JOIN_ZONE: 当一个客户端已经成功加入一个房间后,被通知。(它变为一个SFSUser对象)。怎样添加Java库或扩展依赖你需要做的是配置 .jar 文件在适当的目录并重启服务器。推荐使用2个文件夹:SFS2XRoot/lib/在这里,我们推荐添加数据库驱动,所有分区将使用的多用途库以及服务器本身。SFS2XRoot/extensions/_lib_/这个文件夹被推荐在你的系统中被多个扩展件共享使用的库。例如”Google Collections”jar, Hibernate jar,等。不要添加你的扩展jar到这个文件夹,因为AdminTool将不能侦测到它,当你配置Zone/Room 配置时。SFS2XRoot/extensions/the-extension-name.最后,如果你有一个或多个jar文件被一个特定的扩展使用时,你能简单的配置这些文件在你的扩展文件夹下。怎样配置与外部数据库的连接SFS2X允许连接到数据库,它的方式非常类似于它的前辈。所有你需要做的是从你的数据库供应商那里下载JDBC Connector并拖拽.jar文件到 SFS2XRoot/lib/folder.下面的步骤是运行AdminTool,打开Zone Configurator模块,选择你的分区,并最终点击Database manager标签来编辑配置.Driver class: org.git.mm.mysql.DriverConnect string: jdbc:mysql:/localhost:3306/sfs2x怎样创建一个基于扩展的自定义登录为了添加你的自定义登录逻辑,你应该至少执行下面2个步骤。1. 配置分区登录AdminTool,打开Zone Configurator模块,并激活分区的Use custom login配置;然后重启SFS2X.2. 服务器代码创建一个服务器端扩展类,它继承于SFSExtension类。你的init()方法应该看起来像这样:l 创建一个服务器端扩展,继承自SFSExtension 类。你的init()方法应该看起来像这样:Overridepublic void init() trace(My CustomLogin extension starts!); / Register for login event addEventHandler(SFSEventType.USER_LOGIN, LoginEventHandler.class); l 创建LoginEventHandler类,它关注与用户名/密码的核对。下面的例子,2个指定的用户不允许登录。public class LoginEventHandler extends BaseServerEventHandler Overridepublic void handleServerEvent(ISFSEvent event) throws SFSException String name = (String) event.getParameter(SFSEventParam.LOGIN_NAME); if (name.equals(Gonzo) | name.equals(Kermit) / Create the error code to send to the client SFSErrorData errData = new SFSErrorData(SFSErrorCode.LOGIN_BAD_USERNAME); errData.addParameter(name); / Fire a Login exception throw new SFSLoginException(Gonzo and Kermit are not allowed in this Zone!, errData); 如果没有异常,系统将接受用户名并继续登录过程。有其它的一些原因可能导致错误,例如:l 分区是满了,没有更多的登录允许;l 同名的其它用户是已经登录;l 用户在被禁用列表;l 用户名可能包含不被接受的单词;一旦所有的检查都通过了,用户将最终登录分区。在这点上,服务器代码将接受一个USER_JOIN_ZONE事件,如果你订阅了它。最后一步是可选的,一些情况下它是不需要的.TIP:当使用异步事件工作,如USER_LOGIN和USER_JOIN_ZONE,维持当前的传输和操作状态是比较困难的。一个简单的方法是使用用户的会话对象。特别的会话对象允许存储自定义的参数作为键值对(参看JavaDoc, getProperty/setProperty等).3. 密码的安全为了安全的原因,用户密码是绝对不允许在客户端和服务器间明文传输。因此在API中我们提供了一个方法来比较数据库中原始密码的加密密码。getApi().checkSecurePassword(session, clearPass, encryptedPass);如果密码匹配将返回true,否则返回false.4. 登录时,改变用户名查看服务器logsSFS2X提供了详细的日记为了所有的活动。你能咨询他们在任何时候通过检查logs/文件夹,额外的logs/boot/文件夹下,你将发现启动阶段详细的log.你的扩展的调试你能容易的附加一个远程Debugger到服务器,启用你喜欢的Debugger来调试追踪扩展。SFS2X 能用sfs2x.bat脚本启动。通过添加JVM开关到启动脚本,你能远程调试。你能做它通过下面的步骤:l 打开AdminTool的Server Configurator模块,并进入JVM 配置页;l 添加下面的开关到JVM选项列表里:-Xdebug-Xnoagent-Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=nl 提交变化,重启SFS,现在你能开始一个远程的调试会话。If you want to keep the script allowing debug separate from the standard start script, simply duplicate the start script and modify it by adding the above switches using a text editor. Then save the script as debug.sh or debug.bat and launch it如何安排
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年大型医院建设施工合同范本包工不包料
- 2024年度婚姻财产鉴定合同
- 2024工程项目借款合同
- 2024工地防水材料买卖合同书
- 2024年度基于BIM的建筑物流管理服务合同
- 合同履约的会计分录-记账实操
- 2024年商标许可使用权合同
- 全民节约用水倡议书范文(6篇)
- 2024年度建筑施工质量安全合同
- 2024年城市轨道建设特许经营协议
- 2024年消防设施操作员之消防设备高级技能每日一练试卷B卷含答案
- 气液两相流-第2章-两相流的基本理论课件
- 学会宽容善待他人
- 算法及其描述-高中信息技术粤教版(2019)必修1
- RITTAL威图空调中文说明书
- 生物质能发电技术应用中存在的问题及优化方案
- GA 1809-2022城市供水系统反恐怖防范要求
- 幼儿园绘本故事:《老虎拔牙》 课件
- 2021年上半年《系统集成项目管理工程师》真题
- GB/T 706-2008热轧型钢
- 实验六 双子叶植物茎的初生结构和单子叶植物茎的结构
评论
0/150
提交评论