我理解两者背后的主要原则.然而,我有一个我无法回答的想法.
基准测试显示,WebSockets可以提供更多消息,如本网站所示:http://blog.arungupta.me/rest-vs-websocket-comparison-benchmarks/
这是有道理的,因为它声明连接不必关闭和重新打开,也是http标头等.
我的问题是,如果连接总是来自不同的客户端(也许可能是来自同一客户端的那些),该怎么办?该基准测试表明它是从我理解的相同客户连接,这将有意义保持一个恒定的连接.
如果用户每分钟只执行一次请求,那么通过REST而不是WebSockets运行通信是不是有益,因为服务器可以释放套接字并且可以处理更多的人群?
要解决REST的问题,你可以通过垂直扩展,WebSockets是水平的吗?
这有意义还是我没有?
vto*_*ola 13
这是我迄今为止的经验,我很高兴讨论我在使用CQRS的大型应用程序中使用WebSockets的结论:
您是在创建财务应用程序,游戏,聊天还是需要低延迟,频繁,双向通信的任何类型的应用程序?使用WebSockets:
您是否需要在客户端进行推送通信和/或发布/订阅,并且您的应用程序不是太大?使用WebSockets.可能没有必要进一步使事情复杂化.
如果您不需要非常快地发送命令,并且您希望执行的读取远远多于写入,则应该公开REST API以执行CRUD(创建,读取,更新,删除),特别是C_UD.
然后,您应该公开WebSocket端点以订阅特定主题,并执行低延迟查询响应,例如填充自动填充框,检查读取模型中的唯一项(例如:用户名)或任何类型的搜索.还可以获得有关何时实际处理和完成更改请求(写入)的通知.
我在宠物项目中所做的是将WebSocket端点放在读取模型中,然后在连接时,服务器通过WebSocket向客户端提供connectionID.当客户端通过REST执行操作时,包含一个可选参数,指示"完成时,通过此connectionID通知我".REST服务器返回说明命令是否已正确发送到服务总线.队列使用者处理该命令,并且当完成(好或坏)时,如果该命令具有通知请求,则将另一消息放置在"web通知队列"中,该消息指示命令的结果和要通知的connectionID.读取模型订阅此队列,获取消息并将它们转发到适当的WebSocket连接.
但是,如果您的REST API将由非浏览器客户端使用,您可能希望提供一种使用异步REST方法检查命令完成的方法:https://www.adayinthelifeof.nl/2011/ 6月2日/异步操作,在休息/
我知道,有一个低延迟UP通道可用于发送命令是非常有吸引力的,但如果你这样做,你的整体架构就会搞砸了.例如,如果您使用的是CQRS体系结构,那么WebSocket端点在哪里?在读模型或写模型中?
如果将它放在读取模型上,那么您可以轻松访问读取数据库以回答快速搜索查询,但是您必须以某种方式耦合处理命令的逻辑,作为读取模型负责将命令发送到写入建模并通知是否无法这样做.
如果将它放在写入模型上,则可以轻松放置命令,但如果要通过WebSocket回答搜索查询,则需要访问读取模型并读取数据库.
通过考虑WebSockets部分读取模型并将命令处理留给REST接口,可以保持读取模型与写入模型之间的松散耦合.
| 归档时间: |
|
| 查看次数: |
4663 次 |
| 最近记录: |