先创建一个全局对象用来存储 用户
var userList = new Object();
然后检测后台的启动
application.onAppStart = function()
{
trace("fms onAppStart...");
};
接着检测来自客户端的连接申请
application.onConnect = function(client, detail)
{
trace("server begin");
code...
在接受申请时先判断下最大连接数
if(application.clients.length>=6000)
{
trace("fms users num > 6000, refuse connect");
application.rejectConnection(client);
}
通过后再检测是否有这用户,这里用我的需要是一个二级存储,如果某房间已经有该用户,则拒绝连接,
否则继续 http检测
roomId = detail.split(",")[0];
keys = detail.split(",")[1];
trace("roomId:" + roomId + " keys:" + keys);
client.roomId = roomId;
client.keys = keys;
if(!userList[roomId])
{
userList[roomId] = new Object();
}
if(!userList[roomId][keys])
{
httpConfirm(client, detail);
}
else
{
trace("repeat connect!");
}
http检测是跟jsp通讯确定该用户是否能连,收到能连接信息时push进userlist里
if(myVer.result == "success")
{
trace("--acceptConnection--");
userList[roomId][keys] = true;
application.acceptConnection(client);
}
连接中断时接受 onDisConnect时间,去除userlist里相应用户:
application.disconnect(client);
if(userList[client.roomId] && userList[client.roomId][client.keys])
{
userList[client.roomId][client.keys] = null;
}
这样就能实时获得在线用户,当给jsp或其他服验证时,如果被要求需要其他数据验证,则userlist的value 可以直接存储client对象
当然最后如果要严格一些的话 需要每隔一段时间ping 下所有用户,如果断开,则清除掉相应信息
ps.一般发现服务台打印不了或者加载不了application里的工程,则大多是main.asc写错了,有时错误Log不会直接打印在 管理工具上,
这是可以去logs文件夹里查对应工程的log,或者 服务器全部重启,一般我只重启server 服