-
Notifications
You must be signed in to change notification settings - Fork 0
Home
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,从其中发出请求)