2016-11-19 50 views
-2

我想製作一個「特殊」類型的留言板,其中只有一個隨機的來賓可以一次寫一些東西。當用戶轉到留言簿時,其他用戶將被鎖定 - 其他用戶無法寫入,但他們可以讀取所有以前的條目。過了一分鐘後丟掉用戶?

「聲明」該留言的用戶有一分鐘時間來撰寫他的留言。當時間流逝或他發表評論時,他會自動被鎖定在頁面之外,並且留言簿可供下一個用戶使用。當你試圖寫留言時,無論你是否設法發表評論,你都無法在留言簿上寫一些東西半小時(但你仍然可以像平常一樣查看每個條目)。

我該如何做到這一點?我聽說我必須使用類似cronjobs的東西,但那真的是我需要的嗎?如果有人能給我一些指示(不期望完整的解決方案),那會很棒。

回答

1

因此,讓我總結這一點...

  • 你想使用戶能夠寫在你的留言什麼的。
  • 此人只有1分鐘,使這個消息
  • 然後,用戶將在某處重定向
  • 下一個人就可以寫的東西

A液:

你可以做的是建立一個數據庫並讓每個用戶都有一個session,使用session_start();然後用當前時間將該session_id()寫入數據庫。然後你每隔20秒左右讓一次ajax呼叫檢查。然後刪除此session_id並鎖定該用戶的控件。

如果用戶嘗試發佈某些內容,但另一個用戶正在忙於輸入內容,則可以將該用戶標識添加到數據庫內的自建排隊系統。然後,您應該計算1分鐘內排隊的用戶數量。

這是你在追求什麼?

+0

我喜歡這樣,這聽起來像一個非常簡單的實現。但它似乎有點太簡單了......如果我通過AJAX進行檢查,難道有人不會故意嘗試阻止留言簿被解鎖嗎?如果用戶剛剛離開該頁面怎麼辦? – noClue

+0

哈哈,這就是爲什麼你比較時間+一分鐘與當前時間,當一個新用戶試圖發佈的東西。有了這個,一個新人可以很容易地解鎖一個鎖定的留言簿,並解決鎖定問題。 –

+0

對不起,遲到的回覆 - 這似乎是我正在尋找,並且我可以實際(可能)實現的一個答案。謝謝!我會試試這個。 – noClue

0

首先,我會建議在Java中完成這項工作,假設您有一個應用程序連接到的中央服務器。

如果否,您可以在數據庫中進行管理。你想要做的是鎖定桌子。 Here是關於鎖定表的信息。

解鎖表格也很重要。

一種方法是在一個線程中等待60秒,然後解鎖。另一種可能性是讓數據庫通過event來完成工作。

我會注意到你想要非常小心與這樣的應用程序。如果任何組件發生故障或行爲不如預期,則表上的鎖可能不會被釋放。這是我建議在服務器端完成這項工作的一個原因。另外,你似乎只有一個正在改變的元素;對單個元素使用關係數據庫的機制往往是矯枉過正的。

0

您將需要在架構中定義一些事情來實現此目的。最終歸結爲您網站的互動流程。

架構建議 - 服務器端語言(Java的建議)的WebSockets,數據庫,以及計劃任務(cron裏,計劃任務等)

  1. 你有你的訪客簿頁面。
  2. 當用戶訪問評論部分時,網站會向服務器發送一個「鎖定」命令,以鎖定所有其他用戶。 (理想情況下,您將使用websockets,以便通信可以是兩種方式)
  3. 如果將LOCK命令從服務器發送回查看器,則將禁用評論框。
  4. 隨着鎖定註釋框(只讀/禁用/等),您需要確保該鎖持久服務器上的用戶,以便任何使用該API的人不能通過api通過api寫入留言簿基於用戶提交api請求的用戶鎖定查找。
  5. 一旦用戶寫入他們的評論框,您將設置一個setTimeout,在1分鐘後,它將刪除服務器鎖並警告所有其他客戶端該鎖已被解除(啓用其評論框)。
  6. 通過Java,cron等有一個計劃的任務,這將確保沒有客戶端有鎖,並且數據庫中沒有設置鎖。

這是一個棘手的實施,將有很多陷阱的,你可能會失去與服務器的通信,以釋放鎖如果鎖仍然在服務器上啓用,但沒有客戶端的鎖。