2011-12-13 54 views
0

我有一個web客戶端,我編碼在php/html/javascript/jquery中。我的客戶端通過php腳本從mysql服務器獲取數據(通過post)獲取數據。我知道我可以讓一個php套接字服務器運行在php-apache-mysql框中,但是我如何告訴我的套接字服務器,mysql服務器的一個表上的新記錄剛剛發生,而不是每隔X秒檢查一次新條目皇冠工作?有沒有「基於事件」的系統?基於事件的MySQL的PHP​​套接字?

回答

0

PHP中基於事件的體系結構非常難以實現,但由於許多限制,使得它至少可以說並不是這樣的最佳語言。你最好在Node.js或其他本身是事件驅動的語言/環境中做這件事。

PHP不是最好的語言,因爲除了其他原因,它不能是多線程的,而且你不能寫你自己的自定義非阻塞例程 - 這使你在設計多客戶端時處於嚴重的缺點socket服務器。儘管如此,如果您決定使用PHP創建套接字服務器,那麼可以這樣做,儘管這有點可怕。基本流程是這樣的:

  • Have a MySQL trigger that calls an external program through something like sys_exec()
  • 它調用外部程序(這可能是一個PHP腳本)連接到正在運行的套接字服務器,通過任何方式你喜歡,也許套接字連接,也許共享內存,也許完全像POSIX信號,並通知新行的套接字服務器進程。
  • 套接字服務器現在可以運行一個SELECT(或不是,也許你從上面的腳本傳遞你需要的任何數據),並且做你需要的任何數據,並將數據推送到客戶端。
+0

謝謝,這是一個很好的起點 – Eric

0

如果您已經設置了一個套接字偵聽器,那麼您只需編輯負責插入新mysql記錄的php腳本,以便在插入成功發生時向套接字發送信號。或者我不明白你的問題?

+0

你很明白。這是一個共享數據庫,它不是由腳本插入,而是由我無法控制的軟件插入。但我可以做任何我想要的數據庫 – Eric

+0

嗯...如果你只控制數據庫服務器,它可能是非常醜陋的。一個想法(可能是瘋狂的)是讓php套接字在MYSQL正在監聽的相同端口上監聽(它們都必須設置爲UDP,以便它們可以共享端口)......然後, PHP腳本上的小延遲,以便插入可以完成,然後它會觸發。 雖然這有點圓...如果我這樣做,我可能只需添加一個MYSQL插入觸發器來更新另一個表中單行中的時間戳,然後運行一個cron作業來檢查輔助表(這將是快速的,因爲桌子很小) –

+0

是的,我試圖避免打破它的實時部分,如果我可以說的皇冠工作。我唯一擁有的控件是軟件用來插入記錄的sql查詢。只是純粹的SQL。 – Eric