Jef*_*Cyr 4 sockets rest binary soa
你有没有看到一个很好的理由来创建自定义二进制休息协议而不是使用基本的http rest实现?
我目前正致力于.Net中面向服务的架构框架,负责托管和使用服务.我不想基于像Remoting或WCF这样的现有框架,因为我需要完全的灵活性和控制来执行自定义优化.
所以在这里我试图找到处理这个SOA框架的最佳协议.我喜欢REST的请求/响应无状态连接性质和用于定义资源的uri,但我不喜欢HTTP的基于文本的性质.
以下是我不喜欢HTTP的论据,如果我错了,请纠正我:
首先是证据,解析文本的效率低于解析二进制文件.我更喜欢包含内容长度和二进制内容的固定长度二进制头.
其次,http请求没有序列号的概念,因此将响应与其请求相关联的唯一方法是用于发送请求和接收响应的套接字连接.这意味着对于指定的套接字一次只能有一个待处理的请求,因此如果服务使用者想要并行向服务发送多个请求,则需要向服务器打开多个套接字.自定义休息协议可以定义请求的序列号,因此请求和响应将与序列号而不是套接字相关联,并且可能在同一套接字上并行发送多个请求.我认为没有办法用HTTP标准地做这个,它可以用基于自定义文本的协议来完成,但为什么不把它做成二进制以获得性能.
为了添加更多上下文,我的SOA框架不需要从非.Net消费者访问,因此我对使用.Net二进制格式化程序或其他自定义二进制格式化程序没有任何限制.
我想要一个自定义二进制休息协议是否有任何意义?如果你认为我错了,请告诉我你的论点.
谢谢.
REST是用于构建Web服务的架构风格.Roy Fielding基于他在设计HTTP方面的经验表达了它,但它超越了HTTP.例如,您可以通过普通电子邮件交换部署RESTful服务.
您的资源的REST表示可以是您喜欢的任何东西,但Roy真的强调人们应该尝试使用非常精心设计的标准表示.二进制没有错.事实上,像JPEG和PNG这样的图像表示是二进制的.Google的Protocol Buffers为您提供了创建结构化数据的紧凑二进制表示的方法.
所以简短的回答是,您当然可以使用RESTful并使用二进制表示和本地二进制代替HTTP.
不过,我实际上非常强烈建议您使用HTTP来提高效率.如果您使用自己的协议,那么您将失去服务器与其客户端之间的精彩HTTP缓存基础架构所提供的所有杠杆作用.完整的客户端负载正好落在服务器上,而不是分散在中间缓存上.
10/4/2010:在我们基于HTTP的REST API 中,除了XML,JSON和XHTML之外,我们现在还支持Java序列化对象和Kryo二进制表示.Kryo序列化库的性能明显优于其他库,无需任何特殊协议.减少带宽的另一种方法是使用HTTP压缩和文本表示.
您的数据包的数据可以是您喜欢的任何内容;无论是 XML、纯文本、JSON 还是二进制格式。我认为没有理由将其中任何特定的一项强加给自己(使用最合适的任何一项)。
不过,当说“二进制格式”时,大多数人都会听到固定的字段长度格式和其他非常烦人的事情。一般来说,如果您从数据传输的角度来看并不绝望,我认为没有理由采取这种方式[尽管您可以对.net对象进行二进制序列化,以便可以重新实例化它们[或查看' .net 的协议缓冲区库]]。
摘要:我觉得还可以。任何能让你的船漂浮的东西。
| 归档时间: |
|
| 查看次数: |
1285 次 |
| 最近记录: |