我对服务器推送技术(websockets、socket.io、sockjs)非常陌生,所以这可能是一个非常新手的问题。但是,我的 google-fu 还没有强大到找到答案。
我正在使用 PHP 服务器端和 javascript 客户端编写“事件代码”应用程序。它是这样工作的:
- 当用户登录时,服务器会向他发送最后 10 个事件。这很简单!
- 然后,服务器在用户进入时向用户发送新事件。这就是我无法弄清楚的问题。
现在,我将事件存储在数据库中。服务器如何确定哪些事件是“新的”,哪些是“旧的”(即已经发送到客户端)?是否就像在每个事件的数据库中都有一个布尔列一样简单?
编辑:澄清我的问题:我知道如何设置服务器推送客户端......实际上,websockets、sockjs 和 socket.io 都有相同的 API,它们就是这样设计的。我也知道如何设置 PHP 在事件循环中运行。有这方面的教程。Python、Ruby 和 Javascript 也没有对此的原生支持,而是使用非原生框架来做到这一点。
我的问题具体是关于数据库交互的细节:例如,我的服务器端脚本如何知道数据库已经更新?轮询数据库是我能想到的唯一解决方案,但这似乎不是最优的。我使用的是 MySQL,所以它不是事件驱动的数据库。我使用 MySQL 的原因是该网站的其余部分使用 MySQL。不好的选择?我应该考虑过渡到不同的 DBMS 吗?或者可以让 MySQL 在这个应用程序中工作吗?