The*_*der 1 java mysql spring websocket spring-boot
从几天开始,我一直在搜索社交网络或问答网站如何获得实时通知。我开始了解订阅者-发布者模式。我开始知道实时更新是使用 WebSockets 获取的。Websocket 发布一个端点,客户端订阅该端点并不断获取任何更改的更新。
但是我从网上得到的例子都是聊天应用程序。但我的要求是从 MySQL DB 获取实时通知。所以我有几个问题
如果我的模式是对的,我不知道如何将 WebSocket 连接到 Mysql。任何帮助/指导都非常感谢。
更新:
经过一些更多的网络搜索:
1. 由于我正在为我的网站创建 Rest Webservices,AJAX 是实现通知功能而不是 WebSockets 的更好方法吗?
2. WebSockets 的实现是否比击中 Rest 端点的 AJAX 调用复杂(因为两者的目的是相同的,以获得通知)?
我是否使用 WebSockets 来满足正确的要求?
实时通知是 Websockets 蓬勃发展的地方,它比 AJAX 提供了巨大的优势。
如您所知,在讨论AJAX 的作用(非常适合 CRUD,而不是轮询时)和比较Websocket 性能与 AJAX 性能(Websockets 在实时更新方面总是更快)时,这已经讨论过了。
或者还有其他一些有效的方法可以满足我的要求?
是的...您可以通过向on_update数据库访问点添加“挂钩”来节省资源并提高性能(以及未来的代码维护问题)。
想法很简单:每当函数调用更新 MySQL 数据库时,更新请求也会发送到回调。该回调负责将更新发布到正确的频道。
这样,您就不会轮询 MySQL 数据库。
一些数据库提供更新回调,而另一些则不提供。我认为 MySQL 可以。但是,我避免使用这些数据库链接回调,因为它们是特定于数据库的。最好(恕我直言)将回调添加到应用程序中的数据库访问点,因此替换数据库不会影响代码库。
- 由于我正在为我的网站创建 Rest Webservices,AJAX 是实现通知功能而不是 WebSockets 的更好方法吗?
我不认为 AJAX 是一个好方法。
HTTP/2 有助于减轻 AJAX 的缺点,但并不能解决所有这些缺点。
我不知道您希望同时连接多少个客户端,但是强制客户端每两秒钟发送一个请求非常接近于自我造成的 DoS 攻击。
考虑一下:如果客户端每两秒发送一个 AJAX 请求,而不是 2,000 个并发客户端,则您的服务器将需要响应 1,000 个请求/秒 - 其中包括身份验证、数据库查询和所有爵士乐。
另一方面,使用 Websockets,有 2,000 个连接的客户端,您有 2,000 个持久连接在消息到达之前什么都不做。不需要 CPU 或工作,只需要连接的内存。在推送实际数据之前,服务器上没有压力。
- 实现 WebSockets 是否比击中 Rest 端点的 AJAX 调用复杂(因为两者的目的是相同的,以获得通知)?
是的,它们实施起来更复杂,但一旦你开始,它们就没有那么难了。此外,还有许多库和辅助工具可以减轻您的大部分工作。
与 Websocket 方法相关的常见问题包括水平扩展的处理(通常通过添加发布/订阅数据库或服务,例如 Redis)、消息排序(在可能的情况下最好忽略)和数据传播问题(我们何时标记数据为“可见”?我们是发送整个数据还是仅发送说明数据可用的通知?我们使用多少个渠道以及我们如何划分订阅?)。
通常答案是特定于应用程序的,并且取决于您尝试展开的功能以及数据集的预期大小(如果我在 SO 上给出的每个答案都是一个频道,那么维护将是不切实际的)。
总之……祝你好运!
| 归档时间: |
|
| 查看次数: |
4016 次 |
| 最近记录: |