Javascript 使用Pusher或类似库从数据库自动更新视图

Javascript 使用Pusher或类似库从数据库自动更新视图,javascript,ruby-on-rails,pusher,Javascript,Ruby On Rails,Pusher,我正在Rails中开发一个应用程序,其中我为用户提供了通过HTML表编辑数据库内容的选项。但是我想让它成为协作的,这样当一个用户更新任何东西时,其他用户的视图就会自动更新 我调用AJAX函数来保存/更新数据 通过这种方式,我可以使用轮询,客户机将不断询问服务器是否有任何更新。但这将是低效的 搜索web时,我发现我可以使用web套接字,为此我可以使用Pusher、Slanger等库 但是我没有找到任何关于如何使用这些库来自动更新HTML表的信息 如果您有任何建议,我们将不胜感激。我不使用任何建议,

我正在Rails中开发一个应用程序,其中我为用户提供了通过HTML表编辑数据库内容的选项。但是我想让它成为协作的,这样当一个用户更新任何东西时,其他用户的视图就会自动更新

我调用AJAX函数来保存/更新数据

通过这种方式,我可以使用轮询,客户机将不断询问服务器是否有任何更新。但这将是低效的

搜索web时,我发现我可以使用web套接字,为此我可以使用Pusher、Slanger等库

但是我没有找到任何关于如何使用这些库来自动更新HTML表的信息


如果您有任何建议,我们将不胜感激。

我不使用任何建议,但快速搜索一下pusher.js似乎就足够简单了。在浏览器端定义事件处理程序

在服务器端,您可以触发事件,并与事件一起发送一些数据(例如创建的记录)。这可以是字符串或散列。散列将转换为JSON

然后,无论发送何种数据,都可以使用jquery或类似的库在表中创建新行(或生成所需的任何html)。 在Rails上下文中,使用render生成html字符串而不是JSON将允许您使用片段和模板。同样,使用jquery将它们插入DOM也很容易

RubyonRails甚至还有一个集成了pusher功能的gem。见


我想,其他库(如slanger)的工作方式大致相同。

如果您对轮询不感兴趣,那么您可能正在寻找一个发布/订阅服务器

我建议退房。它允许客户端浏览器建立到您的服务器的长时间运行的连接,而不进行轮询:相反,当您的服务器发送推送时,它们通过将推送中的JavaScript直接呈现到客户端页面来响应


Juggernaut的作者有一个名为的示例项目,它几乎完全满足您的需求——也就是说,它订阅服务器,从连接读取数据后,它会更新客户端所在的页面。Holla使用它创建聊天服务,但您可以使用相同的代码为其他用户更新表格。

thnx,但pusher不是免费的。它为自由用户提供了一些有限的连接。你们告诉我你们不使用它们,然后告诉我如何从服务器向客户端发送信息。当一行被更新时说。如何通知客户/用户某些数据已更新(不使用类似于pusher的库)@mashit:您的问题是如何使用这些库更新html。有相当多的技术可以实现类似的功能,但设置起来可能会非常困难,特别是当您仅限于自由软件时。我认为这是一种方法。thnx thorsten。你的回答很有用。推式套接字与轮询相比有什么优势?我认为推式套接字在内部也使用轮询。我可能错了。你能澄清一下吗?我看了Juggernaut,看起来真的很有用再次感谢..Juggernaut内部不使用轮询;它使用到服务器的持久websocket连接。WebSocket比轮询服务器资源要高效得多。轮询要求打开服务器连接,进行数据库查询,并每隔X秒呈现一个视图,即使此后没有任何更改。。。然而,当进行更改时,轮询会通知客户端,从而产生更高效的通信方法。我认为在您最后一条评论的最后一行中(而轮询…),您想说“推送套接字”。是的,我明白你的意思。另外,库如何知道修改了哪些行/字段。或者它只是更新所有数据。比如说,在我的例子中,我只需要刷新那些已经更新的单元格。(就像谷歌电子表格只刷新所需的单元格一样),那么我需要维护这些单元格的标志吗?或者库对此有一些支持。我将我的系统配置为使用juggernaut。但是juggernaut服务器没有启动,它一直在说在端口5001上启动juggernaut服务器0.5.8。。。在终端上,但从未启动。帮我找出我遗漏了什么。juggernaut_插件不是你想要的。请点击我之前发布的链接,这是Juggernaut的更新版。