Skip to content
kaven276 edited this page Jan 7, 2016 · 8 revisions

Welcome to the noradle-nodejs-client wiki!

尽量模仿 node.js 原生 http 模块

var req = noradle.request({
  x$dbu : "...",
  x$prog : "...",
  headers : {
    ...
  },
  db: {
   ...
  }
});
req.setHeader(...)
req.write(...);
...
req.end(cb(response){...});
  • options.method 指定是否是只读请求,取值为 readonly,readwrite 两个
  • options.version 相当于是哪个版本,用于确保client/oracle的协议版本匹配
  • options.db 相当于 http host,指示目标 db 是哪个
  • pathname 相当于是 x$dbu.x$prog
  • noradle.request 接受到响应后,emit('response', response)
  • response.on('data', cb(data){...}) 可以接受到响应体数据流
  • response.on('readable', cb(){ response.read ... }); 使用 stream 提供的 read 来取数据,利用新版 stream 的好的机制
  • 使用 upgrade 方式建立 client 到 oracle 的双向连接,内部通信协议由应用自行定义
  • request.on('abort') 支持
  • options.connect = keepalive 代表执行完请求后,还要一直占有该 oSlot
  • request.on('continue') 后,client 才发送请求体,对于非常大的请求体可以防止服务器过载或被恶意攻击
  • http.request.on('socket') 对应 noradle.request.on('cSlot'),有了虚拟连接可用触发该事件
考虑模拟 node.js 的 http.request 接口                                         
noradle.request({                                                      
 定位信息,dispatcher 的地址,相当于 node.js 的 host:port                           
 method                                                                
 url: 哪个库的哪个用户下的哪个过程 noradle://pdb1.noradle.com/demo1/index_b.d        
 特殊参数                                                                  
 db : {                                                                
   unique_name: 确定 data-guard 环境下,访问哪个 primay/standby 库                
   instance: 确定在 RAC 环境下,访问哪个实例                                        
 }                                                                     
 headers : {                                                           
   ...                                                                 
 } *                                                                   
}, function(response) {                                                
   ...                                                                 
   response.on('data', function(data)) {                               
     ...                                                               
   });                                                                 
   response.on('end', function() {                                     
     ...                                                               
   });                                                                 
})                                                                     
.write(...)                                                            
.end(...);                                                             
                                                                       
DBPools 是一个 hash,其中记录着所有 db key->dispatcher通道的映射关系                     
                                                                       
db_selector 代表一个 stream,可以用来发送请求信息的通道                                  
noradle.request( db_selector 就可以从中找到指定的合适的 db,从其中发出请求)                 
Clone this wiki locally