Missian同时支持HTTP/TCP,也同时支持同步和异步。
一、同步+HTTP时的协议
这时和Hessian的协议一致。即采用POST发送数据,整个数据包(除了HTTP协议头外的数据)会交给Hessian的序列化机制来编码和解码。请求和响应中都支持chunk,编码解码过程中已经兼容。
二、异步+HTTP时的协议
其实和同步请求的协议相比,只是在HTTP Header中加了一些自动以的协议头。
1、请求
在HTTP头中加了一个自定义的Header:Missian-Async: true
服务器接收到这个请求之后,会将这个请求当作异步请求来处理
2、响应
在HTTP头中加了以下几个自定义的Header:
Missian-Async: true
Missian-Bean: beanName
Missian-Method: methodName
beanName和methodName是异步的关键,missian根据这两个去寻找回调对象(Callback)。
注意beanName是从请求的URL中获取的,比如http://missian.com:8080/abc/hello这个url,missian会将“abc/hello”作为beanName。这个是Hessian中没有的概念。
methodName是进行调用的方法名,Hessian是分装在比较底层的,为了取到这个methodName,不得已改了一点Hessian的代码。
三、同步+TCP时的协议
1、不定长数据格式
比如beanName、methodName、消息体,它们的长度不是固定的,因此在传输它们之前用4个字节表示他们的长度。其实对于beanName和methodName,可能用一个字节就足够表示了,但为了扩展性,也不省这么几个字节了。
2、字符串编码格式
在真个协议头的编码过程中都使用ASCII编码。
3、请求
|<---1字节------>|<---4+n字节--->| <--4+n字节-------->|
| 异步/同步标志位 | beanName | body |
注意首字节是一个标志位,接着传了一个beanName(由4个字节的长度和其真正的内容组成),接下来就是Body极其长度了:长度用于方便missian去读取足够的数据,而body读取完成之后将会交给Hessian去处理,这个和基于HTTP时POST过来的数据是完全一样的。
4、响应
|<---1字节------>|<---4+n字节--->|
| 异步/同步标志位 | body |
首字节是一个同步异步的标志位。接下来是内容极其长度。
四、异步+TCP时的协议
1、请求
|<---1字节------>|<---4+n字节--->| <--4+n字节-------->|
| 异步/同步标志位 | beanName | body |
注
意首字节是一个标志位,接着传了一个beanName(由4个字节的长度和其真正的内容组成),接下来就是Body极其长度了:长度用于方便
missian去读取足够的数据,而body读取完成之后将会交给Hessian去处理,这个和基于HTTP时POST过来的数据是完全一样的。
2、响应
|<---1字节------>|<---4+n字节--->|<---4+n字节--->| <--4+n字节-------->|
| 异步/同步标志位 | beanName | methodName| body |
首字节是一个同步异步的标志位。接下来是beanName和methodName,和HTTP中一样,这两个是实现异步回调的关键。body和同步操作中时是一模一样的。
五、URL格式说明
AsyncMissianProxyFactory和SyncMissianProxyFactory在创建Stub时,接受的参数格式和Hessian是一样的:一个接口(将为这个接口创建代理类)和一个URL(用于表明将数据用何种方式发给那个服务器)。
Missian接受两种协议的URL:
1、HTTP协议:例如,http://abc.com:8080/abc,http://abc.com:8080/abc/a,http://abc.com/abc
2、TCP协议:例如,tcp://abc.com:8080/abc,tcp://abc.com:8080/abc/a,tcp://abc.com/abc
一个URL由4部分组成:协议、服务器地址、端口和BeanName组成。
协议
:只能是http或者tcp,其它字符串不能接受,会抛出异常
服务器地址
:域名和IP都可以使用
端口
:和服务器地址之间用冒号分割,端口可以使用缺省值80(在missian中,http和tcp都是使用80作为默认端口)。
beanName
:在服务器地址和端口之后紧跟了一个'/',这个'/'之后的全部字符串在messian中被称为beanName(不含第一个斜杠)
分享到:
相关推荐
弥赛亚 一个java RPC框架,无模式风格
Spring 集 成ActiveMQ 配置 异步RPC框架 Missian ActiveMq-JMS简单实例使用tomcat
基于matlab实现二维小波时频图;图像;二维;时频分析;结决问题.rar
pentair 5800 SXT软水机说明书
数据来源:中国电力统计NJ-2021版
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
数据来源:中国劳动统计NJ-2023版
数据来源:中国电力统计NJ-2021版
基于HarmonyOS 4开发的一款新闻类的鸿蒙APP源代码
数据来源:中国人口与就业统计NJ-2023版
重庆大学图书管理系统设计与实现 毕业论文设计(51页).doc
数据来源:中国电力统计NJ-2021版
数据来源:中国电力统计NJ-2021版
PostgreSQL9.6x64-HaoSQL
GEM20U系列曲折缝纫机使用说明书
企业培训管理系统设计与实现.doc
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
数据来源:中国劳动统计NJ-2023版
基于matlab实现的LTE 仿真平台 国外维也纳大学网站 MATLAB仿真.rar
数据来源:中国人口与就业统计NJ-2023版