关于在REST上使用JSON与带二进制协议的TCP / IP相比,肯定有优缺点,我想您已经在怀疑二进制协议会更快。我无法确切地告诉您速度有多快(这取决于很多因素),但我想大概相差1-2个数量级。
乍一看,如果某个东西比其他东西慢10到100倍,那么您可能会产生下意识的反应并追求“快速”。但是,这种速度差异仅在于协议本身。如果在服务器端有数据库/文件访问权限,则不会受到您选择传输层的影响。在某些情况下,这可能会使您的传输层速度变得不那么重要。
HTTP REST和JSON的出色表现有很多原因:
- 几乎任何人都可以轻松使用它们。您可以编写您的Web应用程序,然后转过来发布您的API,供世界其他地方使用。现在,任何人都可以达到相同的终点并获得您的服务
- 它们很容易调试,您可以打开一个数据包嗅探器,或者简单地将传入的请求转储到文本文件中,看看发生了什么。你不能用二进制协议做到这一点
- 它们很容易扩展。您可以在以后添加更多属性和数据,而不会破坏与旧客户端的兼容性。
- 可以由javascript客户端使用(不确定他们是否已有protobuf JS解析器,不相信有一个解析器)
通过TCP / IP的Protobuf:
如果这是我的选择,那么我会使用HTTP REST和JSON。有很多其他公司和网站都采用这种方式是有原因的。另外请记住,将来您始终可以支持2个端点。如果您的设计正确,则应将端点选择与服务器端业务逻辑或数据库完全脱钩。因此,如果以后您意识到所有/某些请求都需要更快的速度,那么您应该能够以最小的麻烦添加protobuf。但是,立即使用REST / JSON可以使您更快地动手,并使您走得更远。
就Netty vs Spring而言。我没有直接使用Netty,但我相信它只是一个轻量级的Web服务器,因为Spring是一个框架,可以为您提供更多功能。它具有数据访问层,后台作业调度和(我认为)MVC模型,因此它的重量更大。选择哪一个?如果您决定采用HTTP方式,那么下一个问题可能是您的应用程序的标准如何?如果您要编写一些不适合标准模型的疯狂的自定义逻辑,而您只需要一个HTTP服务器层,请使用Netty。
但是,我怀疑您的应用程序不是那么特别,它可能会受益于Spring提供的许多功能。但这意味着您应该围绕Spring的框架构建应用程序,并按照他们期望的方式进行操作,这意味着在深入研究产品之前要先了解更多有关Spring的知识。总体而言,框架之所以出色,是因为它们再次使您起步更快,但是缺点是您必须适应其模型,而不是自己进行设计,然后期望框架能够正常工作。
(*)-过去曾指出我的帖子并没有反映整个世界的观点,因此我会继续记录,并补充说我对Netty的经验有限(我之前使用过Play框架基于Netty)或Spring(我只读过它)。所以听一口盐就好。