先建立一個全局對象用來存儲 使用者
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 服