zoukankan      html  css  js  c++  java
  • 用XMLSocket获得SmartFoxServer的zone在线人数

    在利用SmartFoxServer开发多人在线应用或游戏的时候,往往需要获取到指定zone的在线人数,官方自SFS 1.50版之后就给出了解决方法,我们可以利用服务器脚本语言或者actionscript来通过发送xml格式的请求来获到,挺简单,写篇日志记一下actionscript利用xmlsocket来获取的例子:(如想用服务器脚本,请参照官方文档,见文末)

    在写代码之前,首先要更改一下sfs的配置文件(config.xml),将配置文件<EnableZoneInfo>true</EnableZoneInfo>中的false改为true来允许获取zone的统计信息,这一步在项目发布后往服务器架设时常常被忘掉,导致在线人数数据无法返回,本人就有这样的惨痛教训。T_T

    AS3代码如下:

    package
    {
    	import flash.events.DataEvent;
    	import flash.events.Event;
    	import flash.events.EventDispatcher;
    	import flash.net.XMLSocket;
    
    	public class ZoneCount
    	{
    		private var _request:String;
    		private var _conn:XMLSocket = new XMLSocket();
    		public var count:int = 0;
    
    		public function ZoneCount()
    		{
    			_conn.addEventListener(Event.CONNECT, onConnect);
    			_conn.addEventListener(Event.CLOSE, onClose);
    			_conn.addEventListener(DataEvent.DATA, onData);
    		}
    
    		public function conn(ip:String, port:int, zoneName:String):void
    		{
    			// 向服务器发送的xml格式请求
    			_request = ""+zoneName+"";
    			_conn.connect(ip, port);
    		}
    
    		private function onConnect(e:Event):void
    		{
    			// 如果连接上,就发送请求
    			if (_conn.connected)
    				_conn.send(_request);
    		}
    
    		private function onClose(e:Event):void
    		{
    			trace("XMLSocket connect is close.");
    		}
    
    		private function onData(e:DataEvent):void
    		{
    			var data:String = e.data;
    			// 检查返回的数据中是否包含zInfo关键字
    			if (data.indexOf("zInfo") > -1)
    			{
    				var xml:XML = new XML(data);
    				// 得到在线人数
    				count = parseInt(xml.children()[0]);
    				_conn.close();
    			}
    
    		}
    
    	}
    }
    

    另外在连接的时候如果遇到安全沙箱问题,解决方法有下面几种:
    一、在被请求的服务器开设843端口,提供策略内容,详见这里
    二、利用flash.system.Security的loadPolicyFile方法指定策略文件地址来获到策略内容。
    三、在swf根目录放置策略文件(crossdomain.xml)。(推荐)

    下面是本实例要用到的策略文件内容:

    < ?xml version="1.0"?>
    < !DOCTYPE cross-domain-policy SYSTEM "/xml/dtds/cross-domain-policy.dtd">
    
    
    
    
       
       
       
    
       
       
       
    
    
    

    参考自官方文档

    后记:
    2009.12.12
    经测试,该方法返回的xml会有不完整的情况,暂时不知道是因为什么导致的。

  • 相关阅读:
    浅入浅出---JQuery究竟是什么?
    How far away ?(DFS)
    SoC嵌入式软件架构设计之七:嵌入式文件系统设计
    Java Log Viewer日志查看器
    软件測试基本方法(三)之黑盒測试
    NLP1 —— Python自然语言处理环境搭建
    个性化搜索的几个阶段
    自然语言处理扫盲·第四天——白话人机问答系统原理
    自然语言处理扫盲·第三天——白话情感分析原理
    自然语言处理扫盲·第二天——白话机器翻译原理
  • 原文地址:https://www.cnblogs.com/tianliangle/p/2339033.html
Copyright © 2011-2022 走看看