2012-09-13 45 views
8

我在讀Nolithius關於長輪詢的文章。根據部分PHP睡在整個會議,寫了session_write_close功能應以防止未來死鎖整個會話調用。究竟死鎖是什麼意思?這是否意味着如果沒有這個函數,在客戶端打開的同一個域中的任何其他頁面將不能從其他腳本(比如這個腳本)接收AJAX數據,直到這個頁面完成執行並返回結果爲止?爲什麼會這樣呢? session_write_close如何幫助?在他接收到來自這個請求的數據之後,下次他從這個域請求一個頁面時,不會使用它從客戶端刪除所有個性化設置?爲什麼要在長輪詢中使用session_write_close?

回答

15

這是我的理解:

當基於文件會話用於每個請求字面上鎖定文件,直到請求結束。

表示下一個請求(也使用會話數據),必須等待被釋放鎖。

這是爲了避免會話數據損壞。

使用session_write_close()將清理(但不丟失任何會話數據),並釋放鎖更早上的文件允許其它請求繼續。

這是特別是如果你有入睡了很多劇本,可能是好的做法。

+1

只會其處於睡眠狀態被鎖定,或者是整個域鎖定,因此不允許其他AJAX請求到其他腳本,pageloads,等這個文件? – SexyBeast

+0

如果你這樣看,是的,整個域將被鎖定 - 如果你有所有的腳本打開和使用會話。最好的做法是選擇性地在需要的時間和地點打開和關閉會話 - 而不是腳本寬的會話訪問。 – zaf

+0

所以如果我使用'session_write_close',那會不會終止會話?也就是說,當用戶從該域請求另一個頁面時,他會開始一個新的會話嗎? – SexyBeast