我是服务器推送技术(websockets,socket.io,sockjs)的新手,所以这可能是一个非常新手的问题。但是,我的google-fu还不够强大,无法找到答案。
我正在使用PHP服务器端和javascript客户端编写“事件自动收报机”应用程序。它的工作原理如下:
现在,我将事件存储在数据库中。服务器如何确定哪些事件是“新的”哪些是“旧的”(即已经发送到客户端)?是否像在每个事件的DB中都有一个布尔列一样简单?
编辑:为了澄清我的问题:我知道如何设置服务器推送客户端...实际上,websockets,sockjs和socket.io都有相同的API,它们是这样设计的。我也知道如何设置PHP以在事件循环中运行。有关于此的教程。 Python,Ruby和Javascript也没有本机支持,并使用非本机框架来执行此操作。
我的问题是关于数据库交互的细节:例如,我的服务器端脚本如何知道数据库已更新?轮询数据库是我能想到的唯一解决方案,但这似乎不是最优的。我正在使用MySQL,所以它不是一个事件驱动的数据库。我使用MySQL的原因是网站的其余部分使用MySQL。糟糕的选择?我应该考虑过渡到不同的DBMS吗?或者MySQL可以在这个应用程序中工作吗?
答案 0 :(得分:0)
与几乎所有内容一样,实现此目的的方法不止一种,但是根据您的描述,看起来好像是websockets是可行的。
在浏览器端,检查是否支持websocket,如果支持,请添加代码:
var ws = new WebSocket("ws://YOUR_HOST/your_path/");
ws.onopen = function () {};
ws.onmessage = function (evt)
{
render_events(evt.data);
};
ws.onclose = function () {};
其中render_events将是您在浏览器中呈现新事件的浏览器端实现。
关于服务器端,决定原则上要发送哪些事件就像你描述的一样简单,但是因为简单的vanilla PHP不是要在事件循环中运行而只是处理请求并退出然后才能扫描更改在数据库中并将它们发送给客户端也许您应该尝试使用reactphp或php libevent,尽管我没有任何经验。
另一种选择是使用Python或其他更适合等待和响应事件的语言。