UNPKG

rapid-webrpc

Version:
155 lines (124 loc) 3.96 kB
rapid-webrpc ============ 基于websocket的rpc封装工具 #How to use the rapid-webrpc > 示范一个简单的在server端发布方法与在client中使用发布接口的过程. ##At Server-Side /** * 引入所需的rapid组成. 这里将示范一个简单的接口和rdb查询的操作接口, * 所以这里使用了simple-mongodb来访问本地的mongodb */ require("rapid-core"); require("rapid-httpserver"); require("rapid-webrpc"); require("rapid-simple-mongo"); rapid.define({ "config.rapid-service-sockjs":{ prefix:"/haha/heihei" }, // httpserver只做为一个文件server,没有其它内容 "config.rapid-httpserver":{ autoStart:true, mapping:[ { url:"/*", resource:"/app/*" } ] } }); rapid.watch("plugin.rapid-simple-mongo","plugin.rapid-service-sockjs",function(mongo,socketMgr){ // 默认连接本地的mongodb. var db = mongo.getAgent({},{ idle:1000 * 10 }); // 处理db的错误. 防止没有error handle引发的服务崩溃 db.on("error",function(err){ log.err(err); }) /** * addPoint方法 * * addPoint(factory,description,name); * * factory是服务像,上面的方法将被发布为对像的接口. * description是一个描述factory的对像,用来精确描述接口的参数及返回内容. * name,表示发布接口的名称, 如果description中未提供name,则这个参数升效,否则以description中的为准. * * 如果未提供description与name, 方法将自动扫描factory的结构,自动生成一个description对像,以及一个随机的名称. * 这个随机的名称,在每次服务启动的时候都会不同.所以,请小心. */ // 添加一个简单的服务接口 socketMgr.addPoint({ // 以下划线开头的,直接认为是内部方法,不会向外暴露 _notadd:function(){}, // 如果没有参数,也没有callback,认为是一个notify方法,只调用,但是并不确认是否执行成功 what:function(){ console.log(arguments); }, // 如果有一个callback,由认为是正常的通迅方法, hello:function(cb){ cb && cb(null, "what,what,what???"); }, // 带参数的方法 say:function(name,cb){ cb && cb(null, name + " say, what is that???"); } },null,"test"); // 添加另一个服务接口,这个接口将做一个简单的db查询. socketMgr.addPoint({ // 只有一个简单的方法,用来查 query:function(name,selector,cb){ name = name || "test"; selector = selector || {}; db.find(name,selector,function(err,rs){ cb(err,rs); }); } },null,"db"); }); ##At Browser-Side 首选需要将client-side目录下的 "rapid-webrpc.js" 放至到能从browser中访问的位置. <!-- 引入两个依赖的库 --> <script type="text/javascript" src="./socketjs.js"></script> <script type="text/javascript" src="./rapid-webrpc.js"></script> <script type="text/javascript"> // 指定连接位置并给出一个client的名称 RapidClient.setup("/haha/heihei","testclientid" + (Date.now() / 1000)); // 处理一系统的全局事件, error, close, online, offline, unknowMsg RapidClient.on("error",function(err){ console.log(error); }); RapidClient.on("close",function(reason){ console.log(reason); }); RapidClient.on("unknownMsg",function(reason){ console.log(reason); }); //通过getProxy获得一个后端方法的代理对像 RapidClient.getProxy("test",function(err,test){ if(err){ console.log(err.stack); return; } // 直接使用. test.what(); test.say("client ",function(err,rv){ console.log(rv); }); test.hello(function(err,rv){ console.log(err,rv); }); }); RapidClient.getProxy("db",function(err,db){ if(err){ console.log(err.stack); return; } if(db){ db.query("demo",{},function(err,rs){ console.log(err,rs); }); } }); </script>