参考:

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. flask之SQLAlchemy

    本篇导航: 介绍 使用 SQLAlchemy-Utils 一. 介绍 SQLAlchemy是一个基于Python实现的ORM框架.该框架建立在 DB API之上,使用关系对象映射进行数据库操作,简言之 ...

  2. 28、初识socket(subprocess模块)

    经过近一个半月的学习我们已经度过了python基础的阶段,今天我们开始学习python网络编程,没有难以理解的逻辑,更注重的是记忆. 本篇导航: 客户端/服务器架构 scoket与网络协议 套接字 基 ...

  3. pygame-KidsCanCode系列jumpy-part7-游戏启动/结束画面

    通常一个游戏启动(start)或结束(game over)时,都会显示一个画面,来引导用户.这节,我们学习如何处理这块逻辑. 其实之前,我们已经预留了2个函数,只要把它实现即可: def show_s ...

  4. pygame 笔记-2 模仿超级玛丽的弹跳

    在上一节的基础上,结合高中物理中的匀加速直线运动位移公式 ,就能做出类似超级玛丽的弹跳效果. import pygame pygame.init() win = pygame.display.set_ ...

  5. MiniUI破解方法

    解决JQuery MiniUI前端库到期alert弹窗 MINIUI的到期提示是通过JS的Alert 方法弹出的. 那么我们可以不可以截获所有Alert方法,过滤文本.然后….你们懂得 我们只需要在页 ...

  6. Scikit-learn 概述

    https://www.leiphone.com/news/201701/ZJMTak4Y8ch3Nwd0.html

  7. xhr是什么文件类型?

    xhr:XMLHttpRequest在后台与服务器交换数据,这意味着可以在不加载整个网页的情况下,对网页某部分的内容进行更新. 是Ajax的一种用法,而Ajax并不是一门语言,只是一种不需要加载整个网 ...

  8. jquery中选择器input:hidden和input[type=hidden]的区别

    关于选择器:hidden的说明,在jquery说明文档中是这样说的:匹配所有不可见元素,或者type为hidden的元素.而[type=hidden]是查找所有type属性等于hidden的元素.两者 ...

  9. how-can-i-see-the-size-of-files-and-directories-in-linux

    https://stackoverflow.com/questions/11720079/how-can-i-see-the-size-of-files-and-directories-in-linu ...

  10. Java编程的逻辑 (93) - 函数式数据处理 (下)

    本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http:/ ...