上周問了一個(gè)關(guān)于global疑似失效的問題
http://wenda.workerman.net/?/question/2112
我游戲里的操作是,玩家登錄后從數(shù)據(jù)庫(kù)讀取用戶信息,然后global &user,&bag.........
然后通信需要改變數(shù)值的時(shí)候先global &user,&bag,再比對(duì)值,比對(duì)正確就改變,不對(duì)則報(bào)作弊
實(shí)際情況是經(jīng)常無緣無故報(bào)作弊。讓我以為是再調(diào)用這個(gè)global &user,&bag的時(shí)候數(shù)據(jù)失效了,鉆入了進(jìn)程間不共享的情況。
后來測(cè)出來結(jié)果出乎我的意料,我本以為client_id和global一一對(duì)應(yīng),結(jié)果造成錯(cuò)誤的原因是,這個(gè)global是在內(nèi)存中共享的,也就是所有玩家登陸后都要用這個(gè)global &user,&bag里的值,這必然造成數(shù)據(jù)比對(duì)錯(cuò)誤...
現(xiàn)在問題找到,我想用戶的數(shù)據(jù)庫(kù)數(shù)據(jù)只給自己用,不和其他玩家有互換。想到$_SESSION是和client_id對(duì)應(yīng)的。所以理論上應(yīng)該可以每次數(shù)據(jù)庫(kù)獲取&user,&bag....等等后,
先$_SESSION=&user;
$_SESSION=&bag;
......
每次用的時(shí)候再&user=$_SESSION;
&bag=$_SESSION;
用完再存,看起來可以這么實(shí)現(xiàn)。但是對(duì)于用戶數(shù)據(jù)特別多的情況,會(huì)不會(huì)引發(fā)性能的問題,因?yàn)槭謨?cè)里說每次通信都會(huì)攜帶這個(gè)$_SESSION,并且這么存保險(xiǎn)的保險(xiǎn),還請(qǐng)大神抽空解答一下。
另外,數(shù)據(jù)庫(kù)的實(shí)例&db是否也可以這樣放進(jìn)去$_SESSION=&db; 謝謝!
現(xiàn)在迷茫了,同樣的代碼沒動(dòng),有時(shí)候global全用戶共享,有時(shí)候和client_id一一對(duì)應(yīng)。希望大神可以指點(diǎn)一下疑惑
我自己的理解是,global對(duì)該進(jìn)程全體共享。
但是多個(gè)進(jìn)程之間的global不同享
謝謝,目前來看是這樣的,所以我嘗試把單個(gè)用戶的數(shù)據(jù)在登錄完后全部放到$_SESSION里,然后把$_SESSION當(dāng)臨時(shí)數(shù)據(jù)庫(kù)去比對(duì)通信的值,不知這樣有沒有問題
我也曾經(jīng)遇到過你這個(gè)問題,我現(xiàn)在解決辦法就是連接上了就把$client_id寫入到用戶表里面,然后斷線的話就把這個(gè)字段清空
當(dāng)然你可以把一些數(shù)據(jù)讀取出來放在session減少io
用GlobalData,多進(jìn)程之間共享數(shù)據(jù)
http://doc.workerman.net/315189
謝謝,我不需要進(jìn)程間共享,我只需要用戶的數(shù)據(jù)可以存在內(nèi)存里隨時(shí)給自己用二不需要一直讀取數(shù)據(jù)庫(kù),用$_SESSION感覺更方便嘛,就是不知會(huì)不會(huì)產(chǎn)生其他問題