我有一個web客戶端,我編碼在php/html/javascript/jquery中。我的客戶端通過php腳本從mysql服務器獲取數據(通過post)獲取數據。我知道我可以讓一個php套接字服務器運行在php-apache-mysql框中,但是我如何告訴我的套接字服務器,mysql服務器的一個表上的新記錄剛剛發生,而不是每隔X秒檢查一次新條目皇冠工作?有沒有「基於事件」的系統?基於事件的MySQL的PHP套接字?
回答
PHP中基於事件的體系結構非常難以實現,但由於許多限制,使得它至少可以說並不是這樣的最佳語言。你最好在Node.js或其他本身是事件驅動的語言/環境中做這件事。
PHP不是最好的語言,因爲除了其他原因,它不能是多線程的,而且你不能寫你自己的自定義非阻塞例程 - 這使你在設計多客戶端時處於嚴重的缺點socket服務器。儘管如此,如果您決定使用PHP創建套接字服務器,那麼可以這樣做,儘管這有點可怕。基本流程是這樣的:
- Have a MySQL trigger that calls an external program through something like
sys_exec()
- 它調用外部程序(這可能是一個PHP腳本)連接到正在運行的套接字服務器,通過任何方式你喜歡,也許套接字連接,也許共享內存,也許完全像POSIX信號,並通知新行的套接字服務器進程。
- 套接字服務器現在可以運行一個SELECT(或不是,也許你從上面的腳本傳遞你需要的任何數據),並且做你需要的任何數據,並將數據推送到客戶端。
如果您已經設置了一個套接字偵聽器,那麼您只需編輯負責插入新mysql記錄的php腳本,以便在插入成功發生時向套接字發送信號。或者我不明白你的問題?
你很明白。這是一個共享數據庫,它不是由腳本插入,而是由我無法控制的軟件插入。但我可以做任何我想要的數據庫 – Eric
嗯...如果你只控制數據庫服務器,它可能是非常醜陋的。一個想法(可能是瘋狂的)是讓php套接字在MYSQL正在監聽的相同端口上監聽(它們都必須設置爲UDP,以便它們可以共享端口)......然後, PHP腳本上的小延遲,以便插入可以完成,然後它會觸發。 雖然這有點圓...如果我這樣做,我可能只需添加一個MYSQL插入觸發器來更新另一個表中單行中的時間戳,然後運行一個cron作業來檢查輔助表(這將是快速的,因爲桌子很小) –
是的,我試圖避免打破它的實時部分,如果我可以說的皇冠工作。我唯一擁有的控件是軟件用來插入記錄的sql查詢。只是純粹的SQL。 – Eric
- 1. 基於套接字的事件循環
- 2. 基於套接字的程序中的事件和線程
- 3. 基於事件的套接字編程C
- 4. 基於網絡套接字
- 5. PHP/Python Beanstalk套接字事件作業
- 6. 基於PHP/MySQL的
- 7. MySQL的 - 基於2008年的事件
- 8. 基於Webservice的套接字客戶端
- 9. mysql/php中事件的基於時間的資源可用性
- 10. 用於連接套接字的Epoll事件
- 11. PHP沒有套接字文件的MySQL連接
- 12. 基於sortorder字段的MySQL連接
- 13. MySQL PHP基於條件的查詢
- 14. PHP套接字是製作基於PHP jQuery的聊天的可行選項嗎?
- 15. 帶事件的套接字包裝
- 16. gtk +的新事件(選擇套接字)
- 17. 一個基於UDP套接字的無比率文件傳輸
- 18. 幫助開發基於套接字
- 19. 關於基於套接字的Java Server的Tomcat問題
- 20. 用於Node.js的非事件驅動套接字模塊
- 21. NodeJs將'net'套接字轉換爲基於SSL/TLS的套接字?
- 22. MySQL的套接字問題
- 23. 基於第三個事件鏈接Flink中的兩個事件
- 24. 基於事件的模擬
- 25. 基於事件的程序
- 26. 關於Android的套接字
- 27. MySQL的基於IF條件
- 28. 雲上的簡單基於套接字的服務器
- 29. 沒有輪詢的基於選擇的套接字循環
- 30. MySQL:基於事件類型計數事件出勤
謝謝,這是一個很好的起點 – Eric