PHP/Mysql中的Action Listener,只要有任何记录插入到表中?

问题描述:

他们是否有任何方法/方法让我们知道,在所需的表中发生了什么变化?PHP/Mysql中的Action Listener,只要有任何记录插入到表中?

我已经实施了一个解决方案,它每隔30秒检查一次数据库,也就是说,如果在聊天表中发生任何更改,然后刷新我的聊天列表。它减少了很多性能并减缓了网站速度。

他们的任何方式,我们的行为侦听器只有在表中插入任何行时才会调用?

有什么想法?

+0

查找mysql的触发器。或者,您也可以使用socket监听器某种socket.io与nodejs – WatsMyName

+0

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

+0

您可以使用套接字。例如,你可以使用socket.io和nodejs。但这又会更复杂。更好的方法是使用Triggers – WatsMyName

用户可以创建通知表(这将始终包含最后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

您应该只是插入数据,以保持历史,但该机制应通过插座不要超负荷DB来完成,检查此http://dev.kafol.net/2008/11/writing-chat-server-socket-in-php.html

在您的场景中,您需要一个侦听器,它跟踪将新的聊天行插入数据库的时刻。

在将用户插入数据库之前向用户发送聊天消息会更容易。

您可以使用套接字。您可以使用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