pomelo中支持rpc调用另外一个进程中的方法,不过也需要注意一些事项.
首先rpc调用的方法是在另外一个进程中,跟当前进程完全没有关联,当前进程中的对象,不会在rpc调用的方法中被修改.
rpc调用的方法中的参数,实际上是当前进程中兑现的克隆体,虽然值是相同的,但是指向的是两个不同的对象,指针不同.
不要想当然的认为,当前对象传递过去,然后对其进行修改,就能真正的改变他的值.
说的可能不清楚,还是举例子说一下吧.
DataHandler.prototype.changeObjValue = function(charInfo,cb){
var app = this.app;
var charInfo = {id :1,name :'XXX'};
app.rpc.data.dataRemote.changeValue(global,charInfo,function(err,newInfo){
console.log(newInfo);//charInfo 值没有改变{id :1,name :'XXX'}
charInfo = newInfo; 将克隆体的修改重新赋值给原来的对象 即可更新
console.log(newInfo);//charInfo 值 :{id :1,name :'XXX', age:100}
});
}
DataRemote.prototype.changeValue = function(charInfo,cb){
if(!!charInfo){//此时charInfo 是传递过来的charInfo的克隆体,不再是同一对象
charInfo.age = 100;
}
cb( null, charInfo );
}