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中我们可以使用 ...
随机推荐
- win2008 IIS与php整合
首先安装好IIS 安装的时候 要注意三个地方打得勾 注: CGI 会在IIS+PHP的环境中用到 php.ini default_socket_timeout = 60extension_dir ...
- IOS常见错误之一连线错误
在IOS编程中,UI方面,对于新手,接触时,不免喜欢拖控件,觉得省去了一些麻烦,其实在操作控件的过程中也有很多问题需要注意 本人今天就说下遇到的一个问题. setValue:forUndefinedK ...
- html table冻结列
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx. ...
- [15]APUE:pipe / FIFO
管道 pipe 一.概述 管道(pipe / FIFO)是一种文件,属于 pipefs 文件系统类型,可以使用 read.write.close 等系统调用进行操作 其本质是内核维护了一块缓冲区与管道 ...
- appium踩过的坑(2):java.lang.NoSuchFieldError:INSTANCE
- Android中的桌面快捷方式
一.判断是否已有快捷方式 private String getAuthorityFromPermission(Context context, String permission){ if (perm ...
- jquery选择器总结 转自(永远的麦子)
jQuery选择器总结 阅读目录 1, 基本选择器? 2, 层次选择器? 3, 过滤选择器? 4, 表单选择器? jQuery选择器共有四大类,分别为基本选择器,层次选择器,过滤选择器和表单选择器.下 ...
- C#中的BackgroundWorker控件+Delegate.Invoke (委托同步调用)
C#中的BackgroundWorker控件+Delegate.Invoke (委托同步调用) 简单代码,记录一下.一个BackgroundWorker控件 backgroundWorkerRefr ...
- Java实现视频网站的视频上传、视频转码、视频关键帧抽图, 及视频播放功能
视频网站中提供的在线视频播放功能,播放的都是FLV格式的文件,它是Flash动画文件,可通过Flash制作的播放器来播放该文件.项目中用制作的player.swf播放器. 多媒体视频处理工具FFmpe ...
- 透明activity来实现悬浮蔗罩
第一步, activity的代码, 关键代码是进出动画采用淡入淡出方式,让蔗罩出现消失更自然,全屏 public class RobotGuidceV2Activity extends RoboAct ...