Nodejs 使用Protobuf
参考:
为了在nodejs服务端使用proto
所以网上找了一些教程,这里实现下。
一 安装protobufjs
在服务端项目文件夹里shift+右键,选择在此处打开命令窗口,输入
npm install protobufjs

二 .proto文件转成.js
随意写一个测试的login.proto

将login.proto放在服务端项目文件夹下

shift+右键,打开命令窗口,生成js
pbjs -t static-module -w commonjs -o login.js login.proto
生成d.ts (服务端不需要,客户端需要)
pbts -o login.d.ts login.js

项目文件夹内生成了login.js文件

三 代码内使用
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var loginProto = require("./login");
app.get('/', function(req, res){
res.send('<h1>Welcome Realtime Server</h1>');
});
http.listen(3004, function(){
console.log('listening on *:3004');
});
//连接成功
io.on('connection', function(socket){
console.log('a user connected');
//监听登录请求
socket.on('login', function(data,callback){
//解析登录数据
var loginReqObj = loginProto.login.LoginReq.decode(data);
console.log("请求登录的用户:",loginReqObj.uid);
//返回登录响应
let loginResObj = loginProto.login.LoginRes.create();
loginResObj.code = 200;
var buffer = loginProto.login.LoginReq.encode(loginResObj).finish();
socket.emit('login', buffer);
});
});
其它:
一, 直接使用.proto文件
var ProtoBufJs = require("protobufjs");
var root = ProtoBufJs.loadSync("./zzz.proto");
var AccountList = root.lookupType("zzz.AccountList");
var Account = root.lookupType("zzz.Account");
var accountListObj = AccountList.create();
for(var i = 0; i < 10; i++){
var accountObj = Account.create();
accountObj.accountName = "断天涯"+i;
accountObj.pwd = "密码"+i;
accountListObj.list.push(accountObj);
}
var buffer = AccountList.encode(accountListObj).finish();
---------------------
作者:断天涯zzz
来源:CSDN
原文:https://blog.csdn.net/u013052238/article/details/81010794
版权声明:本文为博主原创文章,转载请附上博文链接!
Nodejs 使用Protobuf的更多相关文章
- Cocos2d-JS/Ajax用Protobuf与NodeJS/Java通信
原文地址:http://www.iclojure.com/blog/articles/2016/04/29/cocos2d-js-ajax-protobuf-nodejs-java Google的Pr ...
- NodeJs使用nodejs-websocket + protobuf
参考: HTML5+NodeJs实现WebSocket即时通讯 (某人的blog) nodejs-websocket使用示例 (www.npmjs.com网站,有示例) Buffer API (nod ...
- 在安卓下打包cocos2d-js 3.6项目with ProtoBuf.js
项目用到了cocos2d-js 3.6和ProtoBuf.js,但是打包成apk时运行时总是报错(evaluatedOK == JS_FALSE),没有具体的文件和行号报错信息. 只能一个一个文件排查 ...
- Node.js(2)-protobuf zeromq gzip
1.Node.Js环境准备 在win8 + vs.net 2012 环境下调试了很长时间没搞定安装编译问题,重装系统测试了2套环境,解决了编译问题: 1)Win8.1 + vs.net 2013 2) ...
- gRPC中Any类型的使用(Java和NodeJs端)
工作中要把原来Java服务端基于SpringMVC的服务改为使用gRPC直接调用.由于原Service的返回值为动态的Map类型,key值不确定,且value的类型不唯一,因此使用了protobuf ...
- Deno下一代Nodejs?Deno初体验
前言 Ryan Dahl之父发布了新的项目Deno,很多IT媒体都使用了标题“下一代Nodejs”,首先我们看一下Deno的特性: 1.支持typescript (nodejs目前也支持). 2.无p ...
- 【咸鱼教程】protobuf在websocket通讯中的使用
教程目录一 protobuf简介二 使用protobuf三 Demo下载 参考: CSDN:Egret项目中使用protobuf(protobufjs) TS项目中使用Protobuf的解决方案(ba ...
- TarsGo新版本发布,支持protobuf,zipkin和自定义插件
本文作者:陈明杰(sandyskies) Tars是腾讯从2008年到今天一直在使用的后台逻辑层的统一应用框架,目前支持C++,Java,PHP,Nodejs,Golang语言.该框架为用户提供了涉及 ...
- protobuf简单测试应用
protobuf是google推出的一种数据交换协议,比较适合应用于底层服务交互,nodejs提供protobufjs包的实现,下面是一个简单的测试demo: 首先是.proto文件: package ...
随机推荐
- python之对象(实例)
1.对象是关于类而实际存在的一个例子,即实例 #类实例化得到g1这个实例 class Garen: camp='Demacia' def __init__(self,nickname,aggressi ...
- Grok patterns 汇总
S3_REQUEST_LINE (?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})?|%{DATA:rawreques ...
- 【最大公约数&链表】权值 @upcexam5921
时间限制: 1 Sec 内存限制: 512 MB 题目描述 给定一个长为n的正整数序列Ai.对于它的任意一个连续的子序列{Al, Al+1, …, Ar},定义其权值W (l, r)为其长度与序列中所 ...
- PHP01
1.服务端开发基础 前端开发最终还是属于web端开发的一个分支,想要成为前端程序员,就要充分理解web的概念. 网站的概念: 可以在浏览器上通过一个地址直接访问使用 用于提供一种或多种特定服务的一系列 ...
- DBS:TestSys
ylbtech-DBS:TestSys 1.返回顶部 1. -- ============================================= -- 测试系统 -- 2018-4-12 ...
- C语言结构体变量私有化
操作系统 : CentOS7.3.1611_x64 gcc版本 :4.8.5 问题描述 C语言结构体定义中的变量默认是公有(Public)属性,如果实现成员变量的私有(Private)化? 解决方案 ...
- 关于海康威视与Unity3d集成冲突问题解决
一.集成 1.1 了解什么是ANSI系列与GNU系列 https://baike.baidu.com/item/ANSI%20C/7657277?fr=aladdin https://ww ...
- sort is deprecated, use sort_values(inplace=True) for INPLACE sorting
排序是过时的,用sort_values(到位=真)为就地排序
- Unity应用架构设计(10)——绕不开的协程和多线程(Part 1)
在进入本章主题之前,我们必须要了解客户端应用程序都是单线程模型,即只有一个主线程(Main Thread),或者叫做UI线程,即所有的UI控件的创建和操作都是在主线程上完成的.而服务器端应用程序,也就 ...
- css 定位(fixed > absolute > relative)与层级zIndex 的权限认知
原则1: fixed > absolute > relative原则2: zIndex 越高越牛逼,不管你是谁无视身份.原则3: 青出于蓝而胜于蓝,儿子永远比父亲强原则4: 平台很重要. ...