node(thrift)
thrift是一种跨语言的RPC框架,据说uber采在node.js项目中采用thrfit后,比原有的http+json的方式提高近20倍的性能。
所谓的RPC本质上就是客户端将需要调用的方法名和参数通过通信协议传递给服务端,服务端计算后将返回值同样以通信协议返回,该方法在需要实现分布式的应用系统中较常见。
复杂的话,可以做成内部总线的形式。
本文记录一个node.js下thrift的简单例子。
1、下载thrift编译工具,本人用的是最新的0.92版本(当天),在windows下安装后并配置环境变量;
2、编写服务定义文件,类似corba里的IDL文件,如下:
struct User{
1: string username,
2: string password,
}
service UserService{
void add(1: User u),
}
3、编译该文件,执行:thrift --gen js:node user.thrift,执行后会在gen-node.js中生成两个文件user_types.js和UserService.js,将两个文件拷贝到需要远程调用的工程中;
4、在node工程里安装thrift插件包,执行npm install thrift
5、编写server工程:
var thrift = require('thrift');
var UserService = require('./gen-nodejs/UserService.js');
var ttypes = require('./gen-nodejs/user_types');
var users = [];
var server = thrift.createServer(UserService, {
add: function(user, callback) {
users.push(user);
console.log("server add:", users);
callback();
}
},{});
server.listen(3344);
console.log('server start');
6、编写client工程:
var thrift = require('thrift');
var UserService = require('./gen-nodejs/UserService.js');
var ttypes = require('./gen-nodejs/user_types');
var connection = thrift.createConnection('localhost', 3344);
var client = thrift.createClient(UserService, connection);
var user = new ttypes.User();
user.username = 'fredric';
user.password = "sinny";
connection.on('error', function(err) {
console.error(err);
});
client.add(user, function(err, response) {
if (err) {
console.error(err);
} else {
console.log("client stored:", user.username);
connection.end();
}
});
7、分别执行server和client工程,会看见client远程调用了server端的add方法。
node(thrift)的更多相关文章
- 前后端分离————VUE+node(express)
前后端分离----VUE+node(express) vue作为前端的框架,node(express)作为后端的框架.无数据库,使用端口保存数据. VUE: 使用vue-cli构建vue项目(vuea ...
- HTTP与RPC(Thrift)
什么是RPC 从网络协议来说,Http协议与Rpc同属于应用层, 他们的底层都是tcp协议. RPC(即Remote Procedure Call,远程过程调用)和HTTP(HyperText Tra ...
- node(4)express 框架 EJS模板,cookie, session的学习
一.EJS 概述:前端咱们使用过的一个模板套路,是underscore的套路.接下来EJS它属于后台工程师人的模板. https://www.npmjs.com/package/ejs 官网地址 特点 ...
- node (1)
一.介绍 Node.js是一个让JavaScript运行在服务器端的开发平台,它让JavaScript的触角伸到了服务器端. 但Node似乎有点不同: ● Node.js不是一种独立的语言,与PHP. ...
- LeetCode Populating Next Right Pointers in Each Node (技巧)
题意: 给一棵满二叉树,要求将每层的节点从左到右用next指针连起来,层尾指向NULL即可. 思路: 可以递归也可以迭代.需要观察到next的左孩子恰好就是本节点的右孩子的next啦. (1)递归:这 ...
- node(6)angular介绍
一.angular 的介绍 AngularJS[1] 诞生于2009年,由Misko Hevery 等人创建,后为Google所收购.是一款优秀的前端JS框架,已经被用于Google的多款产品当中. ...
- Cocos2d-x 核心概念 - Node(节点)与Node层级架构
Cocos2d-x采用层级结构管理场景 层 精灵 等节点(Node)对象 一个场景包含了多个层,一个层又包含多个对象 层级结构中的节点(Node)可以是场景,精灵等任何对象 节点的层级结构 Scene ...
- 初学Node(四)事件循环
Node中的事件循环 事件循环是Node的核心,正是因为有了事件循环JS才能够在服务端占有一席之地.JS是一种单线程语言,但是它的执行环境是多线程的在加上JS的事件驱动这一特点,使使JS在执行的过程中 ...
- 初学Node(三)模块系统
模块系统 Node根据CommonJS规范实现了一套自己的模块机制,可以使用require()导入一个模块,使用module.exports导出一个模块. require使用 在Node中我们可以使用 ...
随机推荐
- iOS.Performance-trick-presentViewController-is-so-slow-in-didSelectRowAtIndexPath
presentViewController is so slow in "tableView:didSelectRowAtIndexPath:" Use Case: 在UITabl ...
- ElasticSearch 命令行管理工具Curator
一.背景 elastic官网现在已经大面积升级到了5.x版本,然而针对elasticsearch的命令行管理工具curator现在仍然是4.0版本. 刚开始找到此工具,深深的怕因为版本更迭无法使用,还 ...
- QT5.2.1大BUG
本来以为5.2.1是release版本 谁知道编译某个程序,执行老是crash 换5.3.2就ok了. 坑啊
- easyui自定义标签 datagrid edit combobox 手动输入保存不上问题解决办法
使用onEndEdit事件(该事件可以获取到editor对象,onAfterEdit事件获取不到Editor对象) 通过editor拿到输入数据并保存. int ci = 0; for(Column ...
- Ubuntu16.04下安装.NET Core
以下为控制台输入代码序列一.sudo sh -c 'echo "deb [arch=amd64] https://apt-mo.trafficmanager.net/repos/dotnet ...
- H5前端性能测试快速入门
前言 说到H5测试,对于做WEB测试的同学来说再熟悉不过了,它包括页H5功能测试,前端性能测试,浏览器兼容性能测试,以及服务端性能测试.那本文谈到的则是H5前端性能测试,并希望通过阅读本文后,能够知道 ...
- sql连着function使用
create function fun002(@thename varchar()) returns int as begin declare @count int select @count=cou ...
- hdu 1312(DFS)
Red and Black Tme Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tota ...
- 第一个jemter测试脚本
通过jmeter代理录制脚本后,会产生大量的无用的请求,尽管在代理中已经过滤了一部分图片或者CSS.JS文件. 手动查看主要的请求:这里主要关注登陆请求,要确定有效的URL请求 删除除/Login.a ...
- A List of Social Tagging Datasets Made Available for Research
This list is not exhaustive - help expand it! Social Tagging Systems Research Group Source Year Obta ...