【问题标题】:How to get live notification updates from mysql using websockets?如何使用 websockets 从 mysql 获取实时通知更新?
【发布时间】:2018-07-19 04:58:08
【问题描述】:

从几天开始,我一直在搜索社交网络或问答网站如何获得实时通知。我开始了解订阅者-发布者模式。我知道实时更新是使用 WebSockets 获取的。 Websocket 发布一个端点,客户端订阅该端点并不断获取任何更改的更新。
但是我从网上得到的例子都是聊天应用程序。但我的要求是从 MySQL DB 获取实时通知。所以我有几个问题

  1. 我是否使用 WebSockets 来满足正确的要求?或者有 其他一些有效的方法来满足我的要求?
  2. 如果这对我来说是有效的方法,我认为解决此问题的模式是:WebSocket 将连接到 MySql 并始终查找更改。它还发布了我的客户将始终寻找的端点。提交给 Mysql 的任何更改都将反映在 WebSocket 中并生成客户端应用程序。

如果我的模式是正确的,我不知道如何将 WebSocket 连接到 Mysql。非常感谢任何帮助/指导。

更新
经过更多的网络搜索:
1. 由于我正在为我的网站创建 Rest Webservices,AJAX 是实现通知功能而不是 WebSockets 的更好方法吗?
2. WebSockets 的实现是否比 AJAX 调用访问 Rest 端点复杂(因为两者的目的相同,都是为了获取通知)?

【问题讨论】:

    标签: java mysql spring spring-boot websocket


    【解决方案1】:

    我是否使用 WebSockets 来满足正确的要求?

    实时通知是 Websocket 蓬勃发展的地方,并且提供了优于 AJAX 的巨大优势。

    如您所知,在讨论 the role of AJAX(对 CRUD 非常有用,而不是在轮询时)和比较 Websocket performance vs. AJAX performance(涉及实时更新时,Websockets 总是更快)时,已经讨论过这个问题。

    或者还有其他有效的方法可以满足我的要求?

    是的...您可以通过将on_update“钩子”添加到数据库访问点来节省资源并提高性能(以及未来的代码维护问题)。

    这个想法很简单:每当函数调用更新 MySQL 数据库时,更新请求也会发送到回调。该回调负责将更新发布到正确的频道。

    这样,您就不会轮询 MySQL 数据库。

    一些数据库提供更新回调,而另一些则不提供。我认为 MySQL 可以。但是,我避免使用这些数据库链接回调,因为它们是特定于数据库的。最好(恕我直言)将回调添加到应用程序中的数据库访问点,因此替换数据库不会影响代码库。

    1. 由于我正在为我的网站创建 Rest Web 服务,AJAX 是实现通知功能而不是 WebSockets 的更好方法吗?

    我认为 AJAX 不是一个好方法。

    HTTP/2 有助于缓解 AJAX 的缺点,但并不能解决所有问题。

    我不知道您希望同时连接多少个客户端,但强制客户端每隔一两秒发送一次请求非常接近自我造成的 DoS 攻击。

    考虑一下:如果客户端每两秒发送一次 AJAX 请求,那么与 2,000 个并发客户端相比,您的服务器将需要以 1,000 个请求/秒的速度响应 - 其中包括身份验证、数据库查询和所有这些爵士乐。

    另一方面,使用 Websockets,有 2000 个连接的客户端,你有 2000 个持久连接在消息到达之前什么都不做。不需要 CPU 或工作,只需要连接的内存。在推送实际数据之前,服务器没有压力。

    1. WebSockets 的实现是否比 AJAX 调用访问 Rest 端点复杂(因为两者的目的相同,都是为了获取通知)?

    是的,它们实施起来更复杂,但一旦开始,它们并不难。此外,还有很多库和辅助工具可以让您轻松完成大部分工作。

    与 Websocket 方法相关的常见问题包括处理水平扩展(通常通过添加发布/订阅数据库或服务,例如 Redis)、消息排序(如果可能的话最好忽略)和数据传播问题(当我们是否将数据标记为“已看到”?我们是发送整个数据还是仅发送一条通知说明数据可用?我们使用多少个频道以及如何划分订阅?)。

    通常答案是特定于应用程序的,并且取决于您尝试展开的功能以及数据集的预期大小(如果我在 SO 上给出的每个答案都是一个渠道,那么维护将是不现实的)。

    无论如何...祝你好运!

    【讨论】:

      猜你喜欢
      • 2011-11-05
      • 2015-05-02
      • 2012-11-29
      • 1970-01-01
      • 1970-01-01
      • 2014-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多