# rapid-webrpc

> Rapid-webrpc toools

Latest version **0.0.1** (published 2014-07-22) · MIT license · 0 weekly downloads

## Install

```sh
npm install rapid-webrpc
pnpm add rapid-webrpc
yarn add rapid-webrpc
bun add rapid-webrpc
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.0.1 |
| Published | 2014-07-22 |
| First published | 2014-07-22 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 1 |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 3 |
| Author | wangsu01@baidu.com |
| Maintainers | wangsu |
| Keywords | rapidjs, webrpc, nodejs, websocket |

## Links

- npm: https://www.npmjs.com/package/rapid-webrpc
- Repository: https://github.com/Clouda-team/rapid-webrpc
- Issues: https://github.com/Clouda-team/rapid-webrpc/issues
- npm.io page: https://npm.io/package/rapid-webrpc

## Dependencies (1)

- [sockjs](https://npm.io/package/sockjs.md) ^0.3.9

## Alternatives

- [@opentelemetry/exporter-zipkin](https://npm.io/package/@opentelemetry/exporter-zipkin.md) — 14.8M weekly downloads
- [pusher-js](https://npm.io/package/pusher-js.md) — 2.0M weekly downloads
- [browserify](https://npm.io/package/browserify.md) — 1.7M weekly downloads
- [sqs-consumer](https://npm.io/package/sqs-consumer.md) — 1.7M weekly downloads
- [@sanity/eventsource](https://npm.io/package/@sanity/eventsource.md) — 930.8K weekly downloads

## Recent versions

- 0.0.1 (latest) — 2014-07-22

## README

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>

---
_Source: https://npm.io/package/rapid-webrpc · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
