2012-11-22 34 views
3

他們是否有任何方法/方法讓我們知道,在所需的表中發生了什麼變化?PHP/Mysql中的Action Listener,只要有任何記錄插入到表中?

我已經實施了一個解決方案,它每隔30秒檢查一次數據庫,也就是說,如果在聊天表中發生任何更改,然後刷新我的聊天列表。它減少了很多性能並減緩了網站速度。

他們的任何方式,我們的行爲偵聽器只有在表中插入任何行時纔會調用?

有什麼想法?

+0

查找mysql的觸發器。或者,您也可以使用socket監聽器某種socket.io與nodejs – WatsMyName

+0

@LoVeSmItH在PHP中的任何替代? – Suleman

+0

您可以使用套接字。例如,你可以使用socket.io和nodejs。但這又會更復雜。更好的方法是使用Triggers – WatsMyName

回答

3

用戶可以創建通知表(這將始終包含最後2只未讀郵件小時左右),然後創建trigger [syntax]這將創造新的通知每次發生變化:

CREATE TRIGGER create_notification AFTER INSERT ON chats 
FOR EACH ROW INSERT INTO notifications (...) VALUES(NEW.col1, NEW.col2)... 

然後你會更小,速度更快的數據庫表來結束。

有一些選擇,如寫一個套接字服務器,但我認爲它會比池數據庫更有效的資源加上我有一個很糟糕的經驗長時間運行PHP腳本。

+0

我意識到這不是他想要的,他希望避免頻繁查詢數據庫以獲取新的聊天記錄。所以我覺得你和我建議觸發器不會幫助他? – WatsMyName

+1

@LoVeSmItH從一個只有10-1000條記錄的專用表中查詢數據似乎比從大型表中獲取一些彙總數據好得多(比如'MAX(date)... WHERE forumId = ... GROUP BY ...' – Vyktor

+1

我也曾想過,那就是爲什麼我用+1來編輯你的解決方案,但是閱讀他的問題,我剛剛意識到他不想要那個......他問題的最後一部分「他們的任何方式,我們的行動監聽者只有在表中插入任何行時纔會調用?' – WatsMyName

1

在您的場景中,您需要一個偵聽器,它跟蹤將新的聊天行插入數據庫的時刻。

在將用戶插入數據庫之前向用戶發送聊天消息會更容易。

您可以使用套接字。您可以使用nodejs + socket.io來執行此操作。下面是關於

socket.io and node.js to send message to particular client

位您也可以看看這篇文章

http://www.flynsarmy.com/2010/05/php-web-socket-chat-application/

+0

我們的應用程序基於服務,或者第三方也可以插入在我們的數據庫的消息,所以我認爲套接字可能不是最好的解決方案? – Suleman