通过 Web Socket 或 AJAX 刷新页面内容

Posted

技术标签:

【中文标题】通过 Web Socket 或 AJAX 刷新页面内容【英文标题】:Page Content Refreshed via Web Socket or AJAX 【发布时间】:2013-02-18 08:42:04 【问题描述】:

我正在开发一个基于 Springs MVC 和带有 Objectify 的 Google App Engine 的项目。

这个应用程序的主要功能是:如果有人向数据存储区发布新内容,那么它应该会自动发布到它所连接的浏览器,而无需刷新页面内容。基本上它是一个类似网站的新闻。发送到浏览器的数据是基于 REST API 的 JSON 数据。

为了实现这个功能,我想到了使用以下方法:

    AJAX:我想过每 2-3 分钟使用一次 AJAX 调用来获得更新。但是这个解决方案似乎不可行,因为来自许多浏览器的许多 AJAX 调用导致许多数据存储读取操作。

    Web Socket:这个概念对我来说很新。我不知道这件事。一些 pusher.com 使用此技术来建立此类连接。

现在我需要您的建议,使用上述两种方法中的哪一种,或者我也愿意接受其他解决方案。

【问题讨论】:

WebSocket 肯定比传统的 Ajax 更快、更高效,但是如果您使用 WebSocket,那么您可能仍然需要为不支持 WebSocket 的旧浏览器编写 Ajax 备份。 先生,您能给我推荐一些使用 web-sockets 的例子吗?我需要这个应用程序可以在移动浏览器上运行,所以我可能不需要编写 AJAX 代码。 也许你在使用通道 API。 developers.google.com/appengine/docs/java/channel 如果您希望将 php 用于后端,Google 的 phpwebsocket 是一个好的开始。请注意,代码虽然已经过时,但实际上并不起作用。尽管如此,所有组件都在那里,它应该让您朝着正确的方向思考。除了上面的链接,您还需要阅读并熟悉最新的WebSocket draft,以获得有关如何进行握手、屏蔽/取消屏蔽数据等的最新和最准确的信息。 【参考方案1】:

Google 应用引擎不支持网络套接字,但它支持类似的通道 API,它也适用于旧版浏览器。这可能不可行,具体取决于您要连接的人数(每 100 个频道收费 1 美分)。频道也有一些注意事项:https://developers.google.com/appengine/docs/python/channel/overview#Caveats

至于使用 Ajax - 如果您将响应缓存在 memcache 中并每 3 分钟刷新一次密钥,那么除非启动新实例或密钥过期,否则您将不会进行任何数据存储读取。

【讨论】:

以上是关于通过 Web Socket 或 AJAX 刷新页面内容的主要内容,如果未能解决你的问题,请参考以下文章

利用fastjson解析json并通过js&ajax实现页面的无跳转刷新

Socket.io node.js,如何避免记录连接时间或考虑页面刷新/多个套接字?

ajax+jsp自动刷新

ajax

ajax

向后台提交数据:通过form表单提交数据需刷新网页 但通过Ajax提交数据不用刷新网页可通过原生态Ajax或jqueryAjax。Ajax代码部分