2011-06-21 55 views
1

快速的背景 - 我想在.net中構建,但我的託管服務提供商將收取75美元來啓用.net,並且我太緊以至於無法支付更多費用。所以它是PHP。我不是非常熟悉php,除了在wordpress中喋喋不休(這是我可能會實現這個目標的地方)。php隨機數發生器總是在服務器上運行

我需要的是一個隨機數發生器(這部分很簡單),坐在我的服務器上,每隔x秒創建一個隨機數,前提是網站上至少有一個訪問者。所以基本上有人登陸頁面就會啓動randomizer,併發的訪問者都會被提供相同的數字。那有意義嗎?也許我可以設置一個標誌,當一個訪客到達,停止後來的投票?

我在想通過掛載load()來實現第一部分,啓動服務並抽出數字,都非常簡單。我如何確保併發訪問者不會輪詢服務,而是服務於訪問者產生的輸出?我試圖說明我的意思如下:

visitor one hits site - polls service 3 5 23 50 29 11 59 84 99 17 34 55 
          visitor two hits site 11 59 84 99 17 34 55 
               visitor three 99 17 34 55 

希望這有一定道理,任何想法是極大的讚賞...

編輯:事情是這樣的一個守護進程?

class TheDaemon 
{ 
    public function run() 
    { 
     while (1) { 
      // do stuff here 
     } 
    } 
} 

$daemon = new TheDaemon(); 
$daemon->run(); 
+0

有趣。出於好奇,你用這些數字做什麼? – Problematic

+0

數字發生器作爲服務?當網站上至少有一位訪問者時,每x秒創建一個隨機數字?這可能應該是一個獨立的腳本或函數,它在調用時返回一個隨機數。 – stefgosselin

+0

@Problematic - 這真的只是一個衆包實驗,除了一點樂趣之外沒有別的原因。只有在設置 – Nathan

回答

1

您需要一個運行每個x服務器並將您的編號寫入文件的cron作業。

在這一點上,你可以讀取文件並將數字回顯給用戶。如果你需要一些代碼,告訴我

代碼爲您cron.php文件現在

$numberToWrite=10; 
$numbers=array(); 
while($numberToWrite--) { 
    $numbers[]=rand(); 
} 
file_put_contents('yourfile',implode("\n",$numbers)); 

了cron裝箱,用隨機數的文件,所有你需要做的就是閱讀它們:

do { 
     $randomNumbers = file('yourfile'); 
} while (!isset($randomNumbers[20])); //> A bit of busy-waiting, anyway not significant 

注意我在這裏使用一個do來檢查文件是否爲空,我使用isset(),因爲它比整個數組快10倍。

+0

@ yes123時不是太痛苦 - 我曾經想過使用cron可能是更好的方式 - 不管頁面是否被請求,也不管該頁面是否已被請求,而是在服務器上運行,而只是提供當前數字。有些代碼會很棒...... – Nathan

+0

儘管cron不會給出我需要的時間間隔,除非它觸發了一個腳本,每五分鐘運行一次,例如5分鐘。 – Nathan

+0

@natha:添加了最簡單的代碼,我可以寫在那裏 – dynamic

0

我認爲這一切都取決於您的「併發」的定義。

當第一個訪問者訪問該站點時,可以將帶有時間戳的字符串寫入文本文件或數據庫,然後爲每個新訪問者檢查該文件或數據庫以及時間戳。如果它在您的併發時間範圍/定義範圍內,那麼您將爲現有值服務,如果沒有,則將其替換爲新值。

0

調用這個懶惰的方法,但是如果你設置了一個簡單的dt和int字段的數據庫表,你可以預先填充整個事物。

然後在任何給定的命中時,只需選擇與dt> = now()關聯的第一個整數。