`
sooxin
  • 浏览: 257569 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

SmartFoxServer项目完成总结

    博客分类:
  • J2EE
 
阅读更多
总体来说,如果是想做一个比较简单的虚拟现实服务,拿sfs来做还是很方便的,省去了前期构造服务器网络,实现数据库接口,数据同步等等一些基础功能的时间,可以一上来就直奔主题,开发自己项目相关的功能.



    Sfs的接口封装也比较简单,基本上看到接口名就能知道是做什么用的,参数是什么意义,而且他的文档也比较详细,对于非服务器开发专业人员也比较方便.sfs的定义也主要在此,比如他最早支持的flash客户端api.



    而随着sfs的成功,也开始将目标转向了目前新兴的iphone, android, sillverlight, unity等 客户端.这次使用c# client api做了一个winform测试程序,使用起来也是非常的方便.





    第一次拿sfs做商业项目,也还是遇到了一些问题,总结一下,另外还有一些未完善的地方,后面再花时间继续实现.





    CustomLogin的处理在zone extension里,必须先join room才能使用xt message.所以需要先写一个zone extension,在这里处理登录验证,注意验证成功后需要向客户端发送room list, 客户端必须收到room list消息才能做后面的操作,这是sfs限制死了的.



本来我想在extension里让客户端验证成功后直接join room,未果,调试良久才发现,客户端未收到room list,不能join room.





    Sfs的user variables只支持bool, integer, string类型,其他类型的数据不能同步.这个问题困扰了我差不多一个小时,最后在客户端一步步跟踪属性同步过程时才发现,其他类型的variable都被忽略掉了.



    于是,为了同步float坐标数据,我不得不加上了float.toString(),数据量又大了不少.





    Sfs消息定义的方式,不要像sample里那样,直接写字符串名字,改用枚举或者常量定义.每个extension name和command name都只有一个字节,在枚举中也可以定义出128个,完全够用.



    这样可以省不少带宽占用量,可以在client上开启debug message开关,看一下一个简单的消息发送会占多少字节.





    如果想同时在eclipse和netbeans下对一个项目进行开发,注意文件编码的问题.eclipse下创建的文件默认编码为gbk,netbeans下创建的文件默认为utf-8,而在eclipse下导入文件时他并不会自动检测文件的编码,所以,你需要在文件的属性里手动设置一下编码方式.另外,netbeans下要在文件中显示中文字符只能使用utf-8,使用gbk会出乱码,如果出现此类错误,修改一下文件编码方式以及指定新的编码即可.





    要关于利用IDE编译环境.在项目最开始的一周里,我使用trace来进行调试,一次次的通过trace打印出中间变量,然后再修改代码,再启动服务器,再看trace信息……在我快要陷入崩溃绝望之时,终于,决定建一个好用的集成调试环境.在尝试eclipse失败后,我成功的在netbeans中打下了断点,单kh步跟踪,于是,整个世界变得清静多了……



    关于如何在netbeans中调试extension,可以参考我之前的一篇文章





    sfs中服务器与客户关通信的协议有三种:xml,json和raw string,使用json会比xml节省不少字节,但其仍然占用比较大的带宽开销.如果是数据交互量比较小的应用,这个问题不会太大,但对于即时战斗类MMO来说,可能会成为一个比较大的问题.尝试了一下使用raw string的方式传递结构体,但是没找到比较好的方法,以后有机会再继续,如果可能的话,结合google proto buffer和raw string方式,将会是一个比较好的方案.





    在处理extension message时,按照示例所提供的方法,先取出cmd,然后使用equal的方式一个个进行比较,然后转到对应的处理函数.对于消息种类比较小的应用来说还没发现问题,但是对于有大量自定义消息的应用,这里就需要修改一下了.





    Sfs的db extension目前看起来只能在当前线程中处理,并且是阻塞式的,暂时没有尝试使用多个线程操作数据库,也没有把数据库操作改为异步操作.这也是未来需要进一步改进的地方.





    暂时不清楚SFS是否会为每个room开启一个单独的线程,或者是每个extension一个线程.如果zone里房间数比较多的话,分多个线程处理也是需要的,未来也需要继续考虑一下多线程的问题.





    Sfs的实现是把一个room当成了一个广播单元,这对于开房间类的游戏来说没有问题,但是如果相用它来做MMO就需要注意一下,因为user variables的同步是以整个room为单位的,也就是当一个房间里人数达到几百人甚至几千人的时候,某个玩家的进入和退出房间消息,属性修改消息的广播量都会是巨大的.但是在没有源码的情况下想要修改这个不大容易,也就是限制了sfs的应用环境.
分享到:
评论

相关推荐

    SmartFoxServer源码

    SmartFoxServer源码SmartFoxServer源码SmartFoxServer源码SmartFoxServer源码SmartFoxServer源码SmartFoxServer源码SmartFoxServer源码SmartFoxServer源码SmartFoxServer源码SmartFoxServer源码SmartFoxServer源码...

    SmartFoxServer中文教程及API

    六、总结 SmartFoxServer为开发者提供了一个强大且灵活的框架,通过学习和理解其API,开发者能够构建出稳定、高效的多人在线应用。"SmartFoxServer中文教程及API"文档是学习和掌握这个平台的关键资源,无论是初学者...

    smartfoxserver java完整版

    5. **事件驱动编程**:SmartFoxServer基于事件驱动模型,客户端和服务器之间的交互都是通过发送和接收事件来完成的。理解和利用好事件系统是高效开发的关键。 6. **安全与权限**:为了保护应用和数据的安全,...

    SmartFoxServer2x实例

    SmartFoxServer2x是一款强大的实时多人在线游戏和应用服务器,被广泛应用于开发网络游戏、社交应用、教育软件等。它的核心特性包括高效的网络通信、安全的数据传输、丰富的扩展性以及易于使用的管理工具。在这个实例...

    SmartFoxServer 2X API

    **SmartFoxServer 2X API** 是一个专为游戏开发和实时应用设计的服务器端解决方案。这个API提供了丰富的功能,让开发者能够构建高度互动的多人在线应用,如多人在线游戏、聊天室、教育平台等。它支持多种客户端平台...

    flex+smartfoxserver+java+access登陆程序与源码.rar

    本项目“flex+smartfoxserver+java+access登陆程序与源码.rar”提供了一个集成的解决方案,利用Adobe Flex作为前端用户界面,SmartFoxServer作为后端实时通信服务器,Java作为业务逻辑处理,以及Access数据库进行...

    smartfoxserver_jar

    为了充分利用这些`.jar` 文件,开发者需要了解如何在Java项目中添加依赖,配置服务器设置,并编写客户端和服务器端的交互代码。这通常涉及到阅读SmartFoxServer的官方文档,理解服务器的工作原理,以及如何通过提供...

    smartfoxserver c# client

    SmartFoxServer是一款强大的多人在线游戏和实时应用服务器,支持多种编程语言,包括C#客户端库。这个名为"smartfoxserver c# client"的压缩包包含了SmartFoxClient,它是一个专门设计用于与SmartFoxServer进行通信的...

    smartfoxserver (SFS)AS3 客户端 API

    smartfoxserver SFS AS3 客户端 API chm中文版

    SMARTFOXSERVER2.0

    技術文檔,SMARTFOXSERVER API.

    SmartFoxServer for java 入门

    SmartFoxServer for java 入门学习资料 sfs + spring + hibernate + redis/mysql 代码部分zj850324@sina.cn

    smartfoxserver (SFS)服务端教程 服务器教程

    smartfoxserver 服务端教程 服务器教程 SFS 服务端教程 服务器教程 5.1 教程: 连接到服务器 5.2 教程: 简单聊天 (part 1) 5.3 教程: 简单聊天 (part 2) 5.4 教程: 高级聊天 (第一部分) 5.5 教程: 高级聊天 (第二...

    SmartFoxServer 2X

    http://docs2x.smartfoxserver.com/网站的速度不是很理想,每次查看文档都感觉不太方便,而且无法离线查看,SmartFoxServer 2X的离线文档。

    SmartFoxServer

    SmartFoxServer是一款强大的多人在线游戏和应用服务器,特别适合...在实际项目中,开发者还可以结合SmartFoxServer的扩展功能,如数据库集成、实时语音聊天、地理位置服务等,进一步提升应用的用户体验和功能多样性。

    smartfoxserver官方文档第一章翻译

    SmartFoxServer 官方文档第一章翻译 SmartFoxServer 是一个多平台的游戏服务器,可以无缝地集成设计与 AdobeFlash 和 Flex 2,也支持其他客户如 Java、冲击波和 .net。它使开发人员能够创建一个广泛的多人游戏体验...

    SmartFoxServer基础入门

    SmartFoxServer 是专门为Adobe Flash设计的跨平台socket服务器,让开发者高效地开发多人应用及游戏. 该服务器主要用来创建多玩家游戏。并提供强大的制作工具,各种回合制游戏和实时游戏都可以胜任。 SmartFoxServer ...

    SmartFoxServer解密源码

    授权文件licence.sfl在server目录下,具体格式:文件构成:KEY的长度+key+DES加密配置文件 解密部分代码: FileInputStream in = readFile(licenceFile); //KEY的长度 int keyLen = in.read(); ...

    smartfoxserver X2 与Unity3D的连接例子Connector(中文版)

    smartfoxserver X2 与Unity3D的连接例子Connector(中文版),能够连接起来并测试!

    smartfoxserver2x-- unity3d--官方案例(1)

    总结起来,"smartfoxserver2x-- unity3d--官方案例(1)"涵盖的内容广泛,涉及游戏服务器端和客户端的设计与实现,包括对象移动的物理模拟、三角形碰撞检测、网络连接管理和游戏大厅的构建。理解并掌握这些知识点,...

Global site tag (gtag.js) - Google Analytics