2010-09-15 76 views
6

我知道有Comet服務器技術可以做到這一點,但我想寫一些簡單和本土的東西。MySQL觸發器+通知一個長輪詢Apache/PHP連接

當一條記錄被插入到MySQL表中時,我希望它以某種方式將這些數據傳遞給一系列使用PHP(或其他)的長輪詢的Apache連接。因此,多人通過他們的瀏覽器「聆聽」,第二個MySQL INSERT發生,它被髮送到他們的瀏覽器並執行。

簡單的方法是讓PHP腳本輪詢MySQL數據庫,但這不是真的從服務器推送,並引入了一些不可接受的不必要的數據庫查詢順序。我想從MySQL獲取數據到長輪詢連接,而根本沒有聽衆查詢。

關於如何實現這個的任何想法?

回答

0

這是我多年來一直在尋找的東西。我還沒有發現SQL Server在INSERT,DELETE和UPDATES上推送消息的任何功能。

TRIGGERS可以對這些事件運行SQL,但在這裏沒用。

我想你必須構建你自己的系統。您可以輕鬆地從PHP(Example in first comment)廣播UDP,問題是PHP在服務器端運行,而客戶端是靜態的。

我的猜測是你可以在客戶端上運行Java Applet,監聽UDP消息,然後觸發頁面的更新。

這只是在撰稿時的一些想法......

+0

也許觸發可以寫的東西像Memcached和PHP的可以查詢呢? – phazei 2011-01-26 21:31:30

+0

PHP是靜態的,不在後臺運行。關於如何使它看起來像一個「線程」一書中有一些技巧,但接下來的問題是更新客戶端頁面。我會說投票必須由AJAX完成。輪詢最後修改日期(由觸發器寫入)可能就足夠了。如果更新,請重新加載頁面。 – 2011-01-28 11:02:10

2

我一直在嘗試各種想法,以及對這樣的解決方案,並採取了SQL查詢的投票是唯一的出路輪詢一個文件。如果填充等於0,則繼續循環。如果文件等於1,則循環運行sql查詢併發送給用戶。它的確增加了另一層級的複雜性,但我認爲這意味着使用mysql的工作量減少,但對於apache或循環守護進程而言則相同。您也可以將命令發送到守護進程「彗星」風格,但是它會根據我所看到的有關套接字如何工作而分叉和循環,希望有人能找到解決方案。

0

MySQL可能不是這個問題的正確工具。 Regilero建議切換您的數據庫,但更簡單的解決方案可能是使用像redis這樣的具有pub/sub功能的東西。

http://redis.io/topics/pubsub