将数据推送到客户端

我喜欢在jQuery中使用PHP和JavaScript。

我正在使用PHP显示SQL数据库中的项目列表。 我有一个按钮,在新选项卡中打开一个新页面,将向数据库添加一个附加项目。

如何将数据库中新添加的项目添加到第一页上当前显示的列表而不刷新该页面?

我可以强制页面每隔几秒发出一次ajax请求,但我认为这不是很好的做法。

我一直在研究套接字 – 但是我不知道如何将这些知识应用到我目前的情况中。

如果您希望服务器将信息推送回客户端, Comet可能就是您在寻找什么。

最近的浏览器支持WebSockets ,它使服务器能够与客户端通信,而无需客户端定期发出AJAX请求。 较旧的浏览器不支持WebSockets,因此如果您需要支持它们,您可能会对允许回退到更基本技术的框架感兴趣,例如对这些浏览器进行长轮询。

请注意,有些库可以让WebSockets或Comet在Web应用程序中集成非常简单(好吧,有些没有),所以不要重新发明轮子并坚持使用你正确使用的PHP框架中的那个现在。 例如,如果它是Laravel,一个简单的谷歌搜索引导我进入BrainSocket , “一个Laravel软件包,允许您使用WebSockets启动和运行实时事件驱动的PHP应用程序。”

在所有情况下,您都不应该使用套接字(除非通过套接字,您的意思是您的问题中的WebSockets)。

您的问题有3种解决方案,

第一个(最简单)使用pull技术开始,因此请在数据库级别检查新项目的每一秒。

第二,您可以将“添加到数据库”表单实现为模式,一旦用户提交表单,您发送ajax请求以更新列表(只要它是执行请求的同一用户)

第三个调查使用套接字,它需要一个打开的套接字,并增加了相当多的复杂性,你需要看看socket.io项目,或类似

你有很多实际推送的选项,根据你需要支持的浏览器(和浏览器版本),你可能需要不止一种方法。

你可以做的最简单的事情是长轮询友好的cometajax上的双关语),你的客户端打开与服务器的连接,只是让它打开。 只要有适合您的数据,服务器就会响应。 但是,这意味着您需要一些机制来处理服务器上相对大量的打开连接,并且可能需要一些异步事件处理。

WebSockets绝对是一个选项,但WebSockets实现起来相当复杂,有一堆竞争标准和支持。 但是,它们非常强大,可以为您提供发送和接收数据的方法。

如果您只需要将数据推送到客户端并且可以使用正常的HTTP POST或AJAX用户操作,那么您可以(也可能应该)查看SSE或Server Sent Events:

https://developer.mozilla.org/en-US/docs/Server-sent_events/Using_server-sent_events