Flash Media Server (FMS) 用户验证与计费设计

一个B/S的用户在线计费系统代码.用到Flash Media Server作服务器,使用rtmp协议来保持客户端的连接。
实现了被动计费(从客户端开始连接到断开连接的时间)和主动计费(从客户端开始连接到服务器主动验证客户端的连接时间)两种方式
需要保证Web服务端与FMS的链接安全,这个比较容易实现,IP策略就可以。也可以在FMS向Web服务端提交验证的页面做一个来路检测。

 

main.asc 代码
   
     
// Flash客户端连接FMS服务器后执行
application.validate = function (data,p_client){
p_client.s
= new Date(); // 记录首次访问时的系统时间。
p_client.key = data; // 用户凭证,我在这里面放的是一段加密凭证,由Flash从客户端提交
var my_lv = new LoadVars();
my_lv.onLoad
= function ( success )
{
if (success)
{
if ( this .key)
{
application.acceptConnection(p_client);
}
else
{
application.rejectConnection(p_client);
}
}
else
{
application.rejectConnection(p_client);
}
};
my_lv.load(
" http://xxx.com/validate.aspx?data= " + p_client.key + " &c= " ); // 通过这个页面解密
}

// Flash客户端断开FMS服务器后执行
application.disconnect = function (p_client){
var c = Math.round(( new Date() - p_client.s) / 1000); // 这里是为了计算连接的秒数
var my_lv = new LoadVars();
my_lv.onLoad
= function ( success )
{
// 需要FMS处理的代码
};
my_lv.load(
" http://xxx.com/validate.aspx?data= " + p_client.key + " &c= " + c + " &e= " ); // C 为客户端连接的秒数
}



application.onConnect
= function (p_client,p_key)
{
application.validate(p_key,p_client);
}

application.onDisconnect
= function (p_client)
{
application.disconnect(p_client);
}


// 为了防止FMS服务或WEB服务出现异常,采用轮询的方式主动计费,以防止客户端出现未计费现象
//(这个方法的原则是保证FMS主动检测时间到客户端开始时间的费用已计算)
online
= function () {
for ( var i = 0 ; i < application.clients.length; i ++ ) {
if (application.clients[i].ping()) {
// 如果客户端还存在连接
var my_lv = new LoadVars();
var server_time = new Date();
my_lv.load(
" http://xxx.com/validate.aspx?data= " + application.clients[i].key + " &live= " + server_time + " &e= " ); //
} else {
application.disconnect(application.clients[i]);
}
}
};
setInterval(online,
6000 ); // 检测时间间隔根据具体情况而定,时间越短,服务请求越多

 

你可能感兴趣的:(server)