Nginx+Luajit服務器全校驗遇到的問題

戰鬥代碼爲服務器和客戶端共有,共享一份代碼,client每次打開,檢查並在服務器下載最新的代碼,保持代碼的一致
服務器:nginx + lua

客戶端:cocos2dx +lua[luajit]

  • 隨機種子不統一
解決:client統一種子和隨機函數,種子的來源來自服務器
  • for k,v in pairs(table) do …. end 遍歷順序不一致
pairs是無序列訪問table, 如果table是數組,#table合法,則儘量使用ipair代替,如果無法替代,重寫pairs,先對table進行排序
function P.pairsByKeys(t)
	local a = {}
	for n in pairs(t) do
		a[#a+1] = n
	end
	table.sort(a)
	local i = 0
	return function()
		i = i + 1
		return a[i], t[a[i]]
	end
end


  • 浮點類型的比較差異
浮點值在不同機型的保存值有微小差異,不同時段也有差異,比如1/3,在A時刻值爲0.3333333334,在B時刻是0.333333333;所以在比較兩個浮點值大小的時候,必須使用誤差去衡量,在使用 >, <, >=, <=, ==,要注意,
將所有涉及到這些符號並非==的表達式改爲: A - B > 誤差[例如0.01] ,== 改爲 A -B < 誤差
即 
A > B ——>  A - B > 0.01
A < B ——>  B - A > 0.01
A >= B  —> A - B > 0.01
A <= B  —> B -A > 0.01
A == B  —> A - B < 0.01


  • lua自身的缺陷和限制
lua自身有自身的限制,棧溢出,字符串長度限制;如果一旦出問題,會導致當前lua線程提前結束,直到一下次,所以儘量避免太大的字符串,避免運行時生成大量的臨時棧變量等。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章