参考:

Nodejs中使用Protobuf的.proto文件

为了在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的更多相关文章

  1. Cocos2d-JS/Ajax用Protobuf与NodeJS/Java通信

    原文地址:http://www.iclojure.com/blog/articles/2016/04/29/cocos2d-js-ajax-protobuf-nodejs-java Google的Pr ...

  2. NodeJs使用nodejs-websocket + protobuf

    参考: HTML5+NodeJs实现WebSocket即时通讯 (某人的blog) nodejs-websocket使用示例 (www.npmjs.com网站,有示例) Buffer API (nod ...

  3. 在安卓下打包cocos2d-js 3.6项目with ProtoBuf.js

    项目用到了cocos2d-js 3.6和ProtoBuf.js,但是打包成apk时运行时总是报错(evaluatedOK == JS_FALSE),没有具体的文件和行号报错信息. 只能一个一个文件排查 ...

  4. Node.js(2)-protobuf zeromq gzip

    1.Node.Js环境准备 在win8 + vs.net 2012 环境下调试了很长时间没搞定安装编译问题,重装系统测试了2套环境,解决了编译问题: 1)Win8.1 + vs.net 2013 2) ...

  5. gRPC中Any类型的使用(Java和NodeJs端)

    工作中要把原来Java服务端基于SpringMVC的服务改为使用gRPC直接调用.由于原Service的返回值为动态的Map类型,key值不确定,且value的类型不唯一,因此使用了protobuf ...

  6. Deno下一代Nodejs?Deno初体验

    前言 Ryan Dahl之父发布了新的项目Deno,很多IT媒体都使用了标题“下一代Nodejs”,首先我们看一下Deno的特性: 1.支持typescript (nodejs目前也支持). 2.无p ...

  7. 【咸鱼教程】protobuf在websocket通讯中的使用

    教程目录一 protobuf简介二 使用protobuf三 Demo下载 参考: CSDN:Egret项目中使用protobuf(protobufjs) TS项目中使用Protobuf的解决方案(ba ...

  8. TarsGo新版本发布,支持protobuf,zipkin和自定义插件

    本文作者:陈明杰(sandyskies) Tars是腾讯从2008年到今天一直在使用的后台逻辑层的统一应用框架,目前支持C++,Java,PHP,Nodejs,Golang语言.该框架为用户提供了涉及 ...

  9. protobuf简单测试应用

    protobuf是google推出的一种数据交换协议,比较适合应用于底层服务交互,nodejs提供protobufjs包的实现,下面是一个简单的测试demo: 首先是.proto文件: package ...

随机推荐

  1. python之对象(实例)

    1.对象是关于类而实际存在的一个例子,即实例 #类实例化得到g1这个实例 class Garen: camp='Demacia' def __init__(self,nickname,aggressi ...

  2. Grok patterns 汇总

    S3_REQUEST_LINE (?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})?|%{DATA:rawreques ...

  3. 【最大公约数&链表】权值 @upcexam5921

    时间限制: 1 Sec 内存限制: 512 MB 题目描述 给定一个长为n的正整数序列Ai.对于它的任意一个连续的子序列{Al, Al+1, …, Ar},定义其权值W (l, r)为其长度与序列中所 ...

  4. PHP01

    1.服务端开发基础 前端开发最终还是属于web端开发的一个分支,想要成为前端程序员,就要充分理解web的概念. 网站的概念: 可以在浏览器上通过一个地址直接访问使用 用于提供一种或多种特定服务的一系列 ...

  5. DBS:TestSys

    ylbtech-DBS:TestSys 1.返回顶部 1. -- ============================================= -- 测试系统 -- 2018-4-12 ...

  6. C语言结构体变量私有化

    操作系统 : CentOS7.3.1611_x64 gcc版本 :4.8.5 问题描述 C语言结构体定义中的变量默认是公有(Public)属性,如果实现成员变量的私有(Private)化? 解决方案 ...

  7. 关于海康威视与Unity3d集成冲突问题解决

    一.集成 1.1 了解什么是ANSI系列与GNU系列    https://baike.baidu.com/item/ANSI%20C/7657277?fr=aladdin    https://ww ...

  8. sort is deprecated, use sort_values(inplace=True) for INPLACE sorting

    排序是过时的,用sort_values(到位=真)为就地排序

  9. Unity应用架构设计(10)——绕不开的协程和多线程(Part 1)

    在进入本章主题之前,我们必须要了解客户端应用程序都是单线程模型,即只有一个主线程(Main Thread),或者叫做UI线程,即所有的UI控件的创建和操作都是在主线程上完成的.而服务器端应用程序,也就 ...

  10. css 定位(fixed > absolute > relative)与层级zIndex 的权限认知

    原则1: fixed > absolute > relative原则2: zIndex 越高越牛逼,不管你是谁无视身份.原则3: 青出于蓝而胜于蓝,儿子永远比父亲强原则4: 平台很重要. ...