Mozilla研究-传输协议
Mozilla 浏览器作为HTTP协议的客户端,它与HTTP服务器(如Apache和IIS等)通信,进行数据下载和上传,自然要用到HTTP协议了。不过HTTP协议只是Mozilla所支持的众多协议的一种,这些协议有的是网络协议,比如HTTP,有的是本地协议,如file,还有的是虚拟协议,比如about。
我们说过,针对接口编程是Mozilla的重要特色之一,这里便是最好的例证:所有协议都要实现nsIProtocolHandler接口,使用者由nsIProtocolHandler请求所需要的服务,而不关心具体的实现。通过URL中的Scheme自然的映射到具体协议的ContractID上,然后由组件管理器创建协议的实例。
nsIProtocolHandler的主要接口函数有:
1. GetScheme 得到协议的Scheme,这里的Scheme其实就是协议的名称,比如http,https和ftp等等。
2. GetDefaultPort 得到协议的默认端口,比如http协议的默认端口是80,https协议的默认端口是443。
3. NewURI 创建一个nsIURI接口的实例。
4. NewChannel 根据提供的nsIURI创建一个Channel,Channel是客户端与服务器端之间连接的抽象,但不能直接从Channel中获取数据。获取数据的方式有两种:其一是调用Open得到nsIInputStream对象,再从nsIInputStream对象中读取数据。其二是调用AsyncOpen注册一个nsIStreamListener对象,当Channel中有数据可用时,Channel会通知nsIStreamListener对象读取数据。
在Mozilla中,实现的协议主要有:
1. nsHttpHandler 实现HTTP(S)协议,这是mozilla中最重要也是最复杂的协议,HTTP协议看似简单,不过要完整实现可不容易。比如处理ResCode 100,重定向,认证和Chunked数据等等,都是比较麻烦的。
2. nsFtpProtocolHandler 实现FTP协议,mozilla能够像浏览网页一样,在浏览器中浏览FTP网站。FTP返回的结果是文本格式,不能直接在浏览器中浏览,要经过nsFTPDirListingConv转换之后才能显示。
3. nsDataHandler 实现Data协议,它用来解码URL中的BASE64编码,感觉用处不大。
4. nsAboutProtocolHandler 实现About协议。用来显示浏览器本身的一些信息,比如,about:plugins用来显示已经安装的插件,about:config用来显示和修改配置信息,about:buildconfig用来显示编译配置信息,about:cache用来显示cache信息等等。
5. nsFileProtocolHandler 实现file协议,用来浏览本地文件,可以当简单的文件管理器使用。
6. nsKeywordProtocolHandler 实现Keyword协议,它只是对HTTP协议的包装,它到指定的URL上去查询某个关键字,估计可以当作搜索引擎使用。
7. nsViewSourceHandler 实现ViewSource协议,它是对其它协议的包装,用来显示HTML源代码。
8. nsChromeProtocolHandler 实现Chrome协议,Chrome是mozilla自己的协议,它用来访问自己的资源文件,像locale、skin和XUL等等。它通过配置文件把chrome URI映射到物理文件上。
Mozilla还有其它一些协议的实现,而且它还可以通过GNomeVFS来支持更多协议,这里就不多说了。
为了避免与框架的耦合,以上这些协议的实现都是通过Factory来创建的。在build/nsNetModule.cpp和build2/nsNetModule.cpp定义了这些协议实现的ComponentInfo,再通过一些宏和GenericFactory包装生成自己的Factory。
所有这些协议都是作为服务提供的,也就是说在整个系统中只有一份实例存在。在第一次使用该协议时创建其实例,使用完后并不销毁,后来再使用时,就取第一次创建的实例。
URL到协议实现的匹配过程是在nsIOService::GetProtocolHandler里完成的。因为协议实现的mContractID都是以”@mozilla.org/network/protocol;1?name=”开头,后面再附加协议的Scheme,所以很容易从URL对应的协议实现上。
相关文章
- 黑马程序员_温习 网络编辑一 (个人笔记)摘要(网络概述---网络参考模型---网络传输要素---IP地址---端口----传输协议(UDP -- TCP)---Socket机制 )
- 黑马程序员——8.网络编程(网络模型、网络地址、传输协议(UDP、TCP/IP)、客户端和服务器端、URL)
- 黑马程序员——java网络编程中的传输协议:UDP和TCP
- GB28181-2022相对2016版"基于TCP协议的视音频媒体传输要求"调整
- 文件传输协议-FTP
- 【计算机网络】传输层TCP协议
- 文件传输协议FTP
- ZeroMQ一个更小、更快、更简单的智能传输层协议
- 字符流、字节流、二进制及其在HTTP协议传输
- leach协议性能对比仿真,包括死亡节点数,数据传输,网络能量消耗,簇头产生数以及负载均衡度