最近公司在做一款网游
本来准备拿原本falsh的实现的那个服务器来用
可是发现 SmartFoxServer 2.x 和Android sdk 2.2+才好匹配,搞了一两天,找到原因所在
Android随着版本的升级,加了一些类库,而这些类在低版本中没有
造成了不兼容
由于本来flash是1.66的SmartFoxServer,测试了只有Android2.3才能正确获得连接,2.3的市场太小
在官网上查了很多,2.x服务器要大概6w一个吧,搞个网游的话成本显得有些高了
而且关于Android的例子9月份发出的,还不是很成熟,基本没有成熟的产品出现,主流是Flash的,不过用这个搞flash的多人游戏还是不错的选择
小小的遗憾吧,后面我们自己写服务器了。
不过这两天找到一些关于SmartFoxServer的资料,拿来分享一下
关于这方面国内的资料还是比较少,找到一个应该是专门搞这个的大哥,这是他的博客:http://asfox.blogbus.com/c1617676/
SmartFoxServer 是专门为Adobe Flash设计的跨平台socket服务器,让开发者高效地开发多人应用及游戏. 该服务器主要用来创建多玩家游戏。并提供强大的制作工具,各种回合制游戏和实时游戏都可以胜任。 SmartFoxServer 支持的播放器从Flash player6版到最新的Flash Player 9,并提供丰富的Actionscript 1.0, 2.0 and 3.0 APIs,同时也支持 Flex Builder 2 and 3. 该产品带有详细的帮助文档, 大约 35 个带源代码的示例 还有强大的远程管理工具. 本入门假定你会基本的flex3开发知识。
SFS简介快速 可靠:
SmartFoxServer 是基于高效和可升级的结构,可以在单CPU服务器机子上处理数千的客户端. 是有名的平民的服务器,最低支持P2-350Mhz。很多公司和游戏机构都已经使用 SmartFoxServer 开发出了很多高质量的在线多玩家应用及游戏。比如Club Penguin
高制作能力:
SmartFoxServer 带有一套支持Actionscript 1.0, 2.0 和 Actionscript 3.0 的APIs 他们都是从flash核心对象扩展出来的新功能,可以让开发者简单快速地开发多玩家应用.
扩展性:
SmartFoxServer 可以使用Actionscript, Javascript, Python and Java进行服务器端的扩展. 自定义服务器端扩展,可以执行复杂的应用,游戏逻辑,高级用户,房间管理,及服务器新行为,等等 另外。
跨平台性:
SmartFoxServer 可以运行在任何系统上: 因为SmartFoxServer 是100%的纯 Java 开发的应用,它可以运行在任何平台上,如:Windows (NT/2K/XP/2003), Linux, MacOS X (10.4 or higher), Solaris 等等.
强大的附加软件:
SmartFoxServer 带有强大的附加软件来扩展其功能:
BlueBox:
让玩家避开网络限制(防火墙, 代理) 来进行多玩家游戏,而不牺牲连接速度. 因为 API 会自动在”幕后“选择最好的连接系统。
RedBox:
免费开源的附加软件,使在SmartFoxServer的框架中集成了音频/视频流的能力(red5), 并简化了 A/V应用的开发难度。
什么是SFS客户端的API?
Sfs已经为你做好了基本的客户端网络通信通道,这个通道可以联通服务端的相关功能模块来实现相关功能。比如用户登录/房间登陆/用户信息广播/更新用户房间信息等等。你只调用和扩展通道中的指定方法即可。
如何安装?
从www.smartfoxserver.com 中找到最新版本的smartfoxserverpro(1.6.2)。然后安装找到RedBoxClient_AS3.SWC在flex3中导入此客户端插件。当然也可以将flashapi中的AS3中源文件直接拷到自己的项目中。这样就可以调用SFS的客户端的API了。
基本步凑
发起socket连接:这是第一步. 就像是在敲服务器的门。如果服务器开着就会相应你,并激活一个连接。
登入: 在这一阶段,你要告诉服务器你是谁你想和哪个应用交互,如果操作成功的话,你就可以当前zone里的房间列表
加入房间: 一旦进入了房间,你就可以和其他用户和应用的逻辑进行交互。
SmartFoxClient 详细介绍
安装:
在flex3中导入项目Examples/as3/smartfoxchat;
smartfoxchat.mxml是其客户端的主文件。
重要常量信息:
// Connection constants
private const serverIp:String = “211.157.41.204″
private const serverPort:int = 9339
private const serverZone:String = “simpleChat ”
以上都是连接的重要信息,第一个是serverip是你的服务器的IP地址;第二个子是端口号,第三个是Zone名称(zone是服务端对于相关集成的功能模块的单位代称);
常用事件:
package …{
import flash.display.Sprite;
//Establish connection with the server
public function connect():void
{
sfs.connect(serverIp, serverPort)
}
以上是连接服务端的方法,只要知道IP和端口号我们就可以对SFS服务器进行联接了。
sfs = new SmartFoxClient(true)
sfs.debug = false;
// Add event listeners
sfs.addEventListener(SFSEvent.onConnection, onConnection)
以上代码是生成一个客户端SFS通道实例。然后监听联连,一旦客户端与服务联通后客户端就可以收到onConnection的这个事件信息。
sfs.addEventListener(SFSEvent.onLogin, onLogin)
Sfs的事件监听基本上是按smartfoxchat.mxml的顺序在走的,onconnetion之后就会会监听到onlogin,这个事件的用处只在于失败登录后客户端会在debug里看到自定义的一段错误信息。
sfs.addEventListener(SFSEvent.onRoomListUpdate, onRoomListUpdate)
登录成功后第一件是收到一个房间列表,客户端的相关list控件通常会绑定这个列表信息这样就可以显示了。要注意的是这里最后有一个sfs.autoJoin(),如果执行将会自动的进行一个房间如果不执行登录程序将到此结束。
sfs.addEventListener(SFSEvent.onJoinRoom, onJoinRoom)
当客户端执行了sfs.joinRoom(roomId),服务端将会派发onJoinRoom事件客户端,客户端再执行onJoinRoom。
常用实例方法:
代码
sendObject (obj:Object, roomId:int = -1) : void //在当前房间发送一个Actionscript对象给其他用户。
setUserVariables (varObj:Object, roomId:int = -1) : void //设置一个或多个用户变量。
sendPublicMessage (message:String, roomId:int = -1) : void //发送一个公有消息。
sendPrivateMessage (message:String, recipientId:int, roomId:int = -1) : void //发送一个私有消息给用户。
joinRoom (newRoom:*, pword:String = “”, isSpectator:Boolean = false, dontLeave:Boolean = false, oldRoom:int = -1) : void //加入一个房间。
leaveRoom (roomId:int) : void //离开一个特定的房间。(断开一个特定房间的连接)。
C:\Program Files\SmartFoxServerPRO_1.6.2\Docs\index.htm
这是SFS的文档主界面,里面有全部的所有SFS的相关资料及所有类的及方法属性的介绍。
市面上其实还有与SFS同类的相关产品,比如adobe的FMS(flash medio server)流媒体服务器可以高效的处理flash流媒体服务(专门针对视音频流不是专门针对游戏)。Java的mina,java的可用于多人实时的服务器。sun game server(sgs)http://www.projectdarkstar.com/。还有python中的twisted框架也可以实现较简单的服务器。
以上说的服务器都是指可以多人实时大部分都支持socket,fms除外