Javascript 服务器推送:服务器如何判断消息是否已经发送到客户端?
我对服务器推送技术(websockets、socket.io、sockjs)非常陌生,所以这可能是一个非常新的问题。然而,我的google fu还没有强大到能够找到答案 我正在使用PHP服务器端和javascript客户端编写一个“事件提示器”应用程序。它的工作原理如下:Javascript 服务器推送:服务器如何判断消息是否已经发送到客户端?,javascript,websocket,socket.io,server-push,sockjs,Javascript,Websocket,Socket.io,Server Push,Sockjs,我对服务器推送技术(websockets、socket.io、sockjs)非常陌生,所以这可能是一个非常新的问题。然而,我的google fu还没有强大到能够找到答案 我正在使用PHP服务器端和javascript客户端编写一个“事件提示器”应用程序。它的工作原理如下: 当用户登录时,服务器向他发送最后10个事件。这很容易 然后,服务器向用户发送新事件。这就是我很难弄明白的 现在,我将事件存储在数据库中。服务器如何判断哪些事件是“新的”,哪些是“旧的”(即已经发送到客户端)?它是否像在数据库中
我的问题是关于数据库交互的细节:例如,我的服务器端脚本如何知道数据库已经更新?轮询数据库是我能想到的唯一解决方案,但这似乎不是最优的。我使用的是MySQL,所以它不是一个事件驱动的数据库。我使用MySQL的原因是网站的其余部分都使用MySQL。错误的选择?我应该考虑转换到不同的DBMS吗?或者MySQL可以在这个应用程序中工作吗?与几乎所有的东西一样,实现这一点的方法不止一种,但根据您的描述,似乎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_事件将是浏览器端实现,用于在浏览器中渲染新事件
关于服务器端,原则上决定发送哪些事件就像您描述的那样简单,然而,由于普通的PHP并不意味着在事件循环中运行,而只是处理一个请求并退出,以便扫描数据库中的更改并将其发送给客户端,也许您应该尝试reactphp或PHP libevent,尽管我对这两种方法都没有经验
另一种选择是使用Python或其他更适合等待和响应事件的语言。为了澄清我的问题(我将编辑上面的原始问题):我知道如何设置服务器推送客户端。。。顺便说一句,websockets、sockjs和socket.io都有相同的API,它们都是这样设计的。我还知道如何设置PHP以在事件循环中运行。有关于这方面的教程。顺便说一句,Python、Ruby和Javascript也没有本机支持,并且使用非本机框架来实现。我的问题是关于数据库交互的详细信息:例如,我的服务器端脚本如何知道数据库已经更新?我使用的是MySQL,所以它不是一个事件驱动的数据库。我使用MySQL的原因是网站的其余部分都使用MySQL。错误的选择?我应该考虑转换到另一个数据库吗?或者可以让MySQL在这个应用程序中工作吗?服务器不是接收更新数据库的触发器的服务器吗?不能使用相同的触发器来更新客户端吗?如果不是这样的话,也许像这样的事情会有所帮助,但这是一个有趣的问题。