MOODLE的會(huì)話鎖

本文介紹在Moodle(魔燈)開發(fā)中如何處理會(huì)話鎖【session locks】。

當(dāng)你創(chuàng)建一個(gè)普通的moodle頁(yè)面并包含config.php時(shí),默認(rèn)情況下,在php運(yùn)行大量moodle引導(dǎo)代碼后,將擁設(shè)置好一個(gè)名為$SESSION全局變量。這是一個(gè)安全的啟動(dòng)假設(shè),但在編寫更高性能的代碼時(shí),最好盡可能減少或消除會(huì)話鎖。

1 調(diào)試會(huì)話鎖問(wèn)題

如果你發(fā)現(xiàn)訪問(wèn)某個(gè)頁(yè)面時(shí)特別慢,在對(duì)做了分析之后,發(fā)現(xiàn)正在等待一個(gè)鎖釋放,那么這可能是一件很容易修復(fù)的事情,可以提高你的整體性能。

$CFG->debugsessionlock=5;//以秒為單位的時(shí)間

當(dāng)一個(gè)會(huì)話被鎖定N秒以上時(shí),將進(jìn)行一次調(diào)試調(diào)用,詳細(xì)說(shuō)明哪個(gè)頁(yè)面在正在鎖定。

2 會(huì)話解鎖【unlocking】

默認(rèn)情況下,moodle內(nèi)核【core】假設(shè)您可能需要修改$SESSION對(duì)象,所以它將在會(huì)話上保持鎖,直到頁(yè)面處理完成時(shí)由shutdown handle釋放會(huì)話鎖。如果您正在處理可能長(zhǎng)時(shí)間運(yùn)行的頁(yè)面,那么您應(yīng)該對(duì)代碼做清晰的分離,把需要修改會(huì)話的代碼和需要長(zhǎng)時(shí)間運(yùn)行的代碼分離開來(lái),并在修改會(huì)話后解鎖會(huì)話。

\core\session\manager::write_close();

3 頁(yè)面中的只讀會(huì)話【read only session】

要使只讀會(huì)話起作用,必須啟用只讀會(huì)話,并且需要您的代碼來(lái)支持它。

如果你提前知道你永遠(yuǎn)不會(huì)改變會(huì)話,但你仍然需要能夠讀會(huì)話,那么你可以將你的頁(yè)面聲明為只讀會(huì)話。這意味著您的頁(yè)面永遠(yuǎn)不會(huì)在另一個(gè)http請(qǐng)求中阻止會(huì)話。

define('READ_ONLY_SESSION', true);

4 web服務(wù)中的只讀會(huì)話

在web服務(wù)中也是如此。聲明web服務(wù)時(shí),可以指定它不需要會(huì)話鎖:

5 完全不用會(huì)話

如果您的代碼完全不需要訪問(wèn)$SESSION,那么可以聲明:

define('NO_MOODLE_COOKIES', true);

6 不需要配置

更極端的一種情況,如果您甚至不需要運(yùn)行完整的moodle引導(dǎo)代碼,那么您可以通過(guò)以下方式跳過(guò)它:

define('ABORT_AFTER_CONFIG', true);

發(fā)表評(píng)論

您的電子郵箱地址不會(huì)被公開。 必填項(xiàng)已用*標(biāo)注